Page 1 of 2 12 LastLast
Results 1 to 25 of 32

Thread: The calculator appears to be incorrect

  1. #1
    Hobbyist
    Join Date
    Apr 2004
    Posts
    104

    The calculator appears to be incorrect

    I have read the post by KyrosKrane concerning Fan Faire June 2005 Write-up (Plus Tanker handout) .

    If you apply what appeared as the top discussion in that thread about the success rate, you find that a conclusion was drawn that "A person with zero skill and the appropriate crafting mastery 3 will have a 50% chance to succeed."

    If you check the calculator, you will find that it does not appear to function properly if the raw *success rate generates a negative number. It appears that the calculator does not bound the lowest success rate to zero, so it can calculate huge negative numbers that give a final result less than 50%. In fact, for very difficult to make items, like GM armor, it computes a value of 5% chance with or without smithing mastery 3.

    Which is correct? Is the write up correct? Or is the calculator correct?

    Thanks,

    Leana Soulwarden
    Blacksmith
    Inevitable Storm
    The Seventh Hammer

  2. #2
    Visitor
    Join Date
    May 2005
    Posts
    28
    Quote Originally Posted by Leana
    IWhich is correct? Is the write up correct?
    I believe the write up is correct but we need someone with rank 3 mastery and 0 skill in some tradeskill to test it I guess.

    If you try something with a trivial way above your skill, you can end up with a negative chance to succeed, altough the write-up says it doesn't.

    I'm not sure the code in EQ really adds extra code to cap the failure chance to 100% before applying aaxp mastery, but if it does then Ngreth's calculator is incorrect, otherwise it's correct.

    As far as I know, Tanker hasn't given out as much details on how the process of applying the successformula as he has for the skillup formula.

  3. #3
    House Ogre
    SOE-DEV
    Ngreth Thergn's Avatar
    Join Date
    Jul 2003
    Posts
    6,483
    without the real code in hand, it is dificult to say.

    I could have sworn that I did hear from tanker that it CAN be a negative chance, then add the modifer for AA mastery... so... we may just have conflicting data. We woiuld need tanker to confirm it one way or another or some crazy person to check.

    I don't feel it is vital because it is NOT likely for someone to get 3 ranks in mastery for a skill they have no skill in. And then at that point we are just really talking theory
    Ngreth Thergn

    Ngreth nice Ogre. Ngreth not eat you. Well.... Ngreth not eat you if you still wiggle!
    Grandmaster Smith 250
    Master Tailor 200
    Ogres not dumb - we not lose entire city to froggies

  4. #4
    Hobbyist Aavar's Avatar
    Join Date
    Dec 2002
    Posts
    110
    Actually its more common than you think. some users have gotten so many aa's that they just buy everything.
    I know of at least 1 person that has all his aa's including mastery's and no tradeskill levels or very low like single digits.
    So unfortunately it is not only theory , as there is 1 practical example that exists and probably more.
    Scout Aavar Avrochet 70th Plainswalker
    Lady Ucchan Kuonji 70th Bedazzler

  5. #5
    Apprentice Trader
    Join Date
    Apr 2003
    Posts
    266
    The easiest and cheapest way to verify this would be to get Brewing Mastery 3 with 0 skill and have someone make 10 Brut Champagnes.

  6. #6
    Visitor
    Join Date
    May 2005
    Posts
    28
    Quote Originally Posted by Aavar
    I know of at least 1 person that has all his aa's including mastery's and no tradeskill levels or very low like single digits.
    Oh! Please, presuming his brewing is 0, could you ask him to do a bunch of Minotaur Hero brews, (trivial 248) and check his successrate?

    If aaxp reduction isn't capped somewhere, he should have 5% chance to succeed, until he gets to skill 45. It should be easy to notice a successrate between 5% or 50%, or perhaps find a cap somewhere in between.

    (I've been doing a small DOS program to do calculations on batches of combines/successrate/streaks and would really love to have some of the questionmarks that popped up during the implementation straightened out.)
    Last edited by Konjure; 07-28-2005 at 11:22 AM.

  7. #7
    Programmer Refugee
    Join Date
    Jan 2004
    Posts
    139
    Ok, fine, you guys got me curious.

    Turns out there's a little thing in the code that doesn't use Mastery AA's unless your skill is MORE than 0, so at 0... nothing.

    Now, at 1, it turns out your chance to succeed can very well be VERY negative when we enter the Mastery code, say on a trivial 270 combine. If your chance before Mastery was -150%, then after Mastery 3 it's -25% (because half of 250 is 125, Mastery 3 is a 50% mod to failure, right?). The next step is the lower capping of success to 5%, so in both cases you're at 5%.

    Now, if the combine "difficulty" was such that, before Mastery, your chance of success was merely 0%, then Mastery would give you that 50% boost. However, the more negative you get, the less benefit you get.

    Clear?

  8. #8
    Trader
    Join Date
    Feb 2005
    Posts
    375
    Very clear and it makes a lot more sense. Thank you Mr. Tanker =)

  9. #9
    Hobbyist
    Join Date
    Apr 2004
    Posts
    104
    Thank you for addressing this, Tanker.

    Leana Soulwarden
    Blacksmith
    Inevitable Storm
    The Seventh Hammer

  10. #10
    Database Code Monkey KyrosKrane's Avatar
    Join Date
    Dec 2002
    Posts
    4,431
    Woot, thankee for the clarification. I'm gonna have to go back and fix a few spreadsheets now...

    I wish there were a way to create your own formula in Excel. =/ It's a royal pain to write out the success/fail formula for each cell or instance.
    Sir KyrosKrane Sylvanblade
    Master Artisan (300 + GM Trophy in all) of Luclin (Veeshan)
    Master Fisherman (200) and possibly Drunk (2xx + 20%), not sober enough to tell!
    Lightbringer, Redeemer, and Valiant servant of Erollisi Marr

  11. #11
    Expert Trader
    Join Date
    Jan 2003
    Posts
    698
    Today's your lucky day, Kk.

    In Excel, go to Tools | Macro | Visual Basic Editor.

    In the VB Editor window, go to Insert | Module.

    In the new module window, you can write a function in VBA...for instance:
    Function Cubed (intInput as integer) as double
    Cubed = intInput * intInput * intInput
    End Function
    Then, whenever you type "=Cubed(2)" in a cell, it would evaluate to 8.

  12. #12
    Expert Trader
    Join Date
    Jan 2003
    Posts
    698
    BTW, a better example in this case might be:

    Function SuccessRate(Trivial As Integer, RawSkill As Integer, Modifier As Integer, Mastery As Integer) As Double
    Dim PrecapRate As Double
    PrecapRate = (RawSkill * (Modifier / 100 + 1) - 0.75 * Trivial + 51.5) / 100
    If RawSkill <> 0 then
    Select Case Mastery
    Case 1
    PrecapRate = 1 - ((1 - PrecapRate) * 0.9)
    Case 2
    PrecapRate = 1 - ((1 - PrecapRate) * 0.75)
    Case 3
    PrecapRate = 1 - ((1 - PrecapRate) * 0.5)
    End Select
    End if
    If PrecapRate > 0.95 Then
    SuccessRate = 0.95
    ElseIf PrecapRate < 0.05 Then
    SuccessRate = 0.05
    Else
    SuccessRate = PrecapRate
    End If
    End Function
    Note that this function has NO error checking. It assumes you will enter proper values for each arguement.

    In this examples, the formula "=SuccessRate(335,0,5,3)" evaluates to .05, which is what you'd expect from a trivial 335 combine with skill 0, a geerlok, and mastery 3.

  13. #13
    Trader
    Join Date
    Dec 2004
    Posts
    387
    Quote Originally Posted by Tanker
    Now, at 1, it turns out your chance to succeed can very well be VERY negative when we enter the Mastery code, say on a trivial 270 combine. If your chance before Mastery was -150%, then after Mastery 3 it's -25% (because half of 250 is 125, Mastery 3 is a 50% mod to failure, right?). The next step is the lower capping of success to 5%, so in both cases you're at 5%.
    Thank you, thank you, thank you, Tanker!

    Person A: non-tradeskiller with extremely low skill and Mastery 3
    Person B: journeyman (200) tradeskiller with no mastery

    Prior to this correction, those who interpreted the Fan Faire information came to the wrong conclusion. It looked like Person A had a 50% chance of making a tradeskill trophy, for instance. While Person B has much less. Never did seem fair.

  14. #14
    Database Code Monkey KyrosKrane's Avatar
    Join Date
    Dec 2002
    Posts
    4,431
    Twistagain, I'm pretty sure there's a mistake in your macro. In the mastery part. I'm a bit woozy now, but I'll look at it in more detail later on. Should be something like:

    PrecapRate = PrecapRate + ((1 - PrecapRate) * 0.5)

    Adjusted for each one. Again, I'm not sure, I'll have to study it when I'm a bit more clear-headed.
    Sir KyrosKrane Sylvanblade
    Master Artisan (300 + GM Trophy in all) of Luclin (Veeshan)
    Master Fisherman (200) and possibly Drunk (2xx + 20%), not sober enough to tell!
    Lightbringer, Redeemer, and Valiant servant of Erollisi Marr

  15. #15
    Visitor
    Join Date
    Mar 2005
    Posts
    15
    I too fell into the category of having Salvage 3 and Mastery 3 in all tradeskills before taking up tradeskills seriously. Actually, I did have 250 Brewing (for "something to do"), 115 Tailoring (req'd for epic 1.5 combine) and the rest were below 50 (Blacksmithing, Fletching) or at zero (JC, Pottery, Baking).

    Tradeskills just did not hold any interest for me since 1999.

    [80 Bloodreaver] Master Artisan Klotar Steelheart of the Freeport Militia (Dark Elf)
    Sword of Fate ~ Prexus


  16. #16
    Expert Trader
    Join Date
    Jan 2003
    Posts
    698
    Quote Originally Posted by KyrosKrane
    Twistagain, I'm pretty sure there's a mistake in your macro. In the mastery part. I'm a bit woozy now, but I'll look at it in more detail later on. Should be something like:

    PrecapRate = PrecapRate + ((1 - PrecapRate) * 0.5)

    Adjusted for each one. Again, I'm not sure, I'll have to study it when I'm a bit more clear-headed.
    Those are equivalent, Kyroskrane.

    PrecapRate + ((1-PrecapRate)*0.5) = 1-((1-PrecapRate)*0.5)
    PrecapRate + .5 - .5*PrecapRate = 1-.5 + .5*PrecapRate
    .5*PrecapRate + .5 = .5 + .5*PrecapRate

  17. #17
    Visitor
    Join Date
    May 2005
    Posts
    28
    Quote Originally Posted by Tanker
    Turns out there's a little thing in the code that doesn't use Mastery AA's unless your skill is MORE than 0, so at 0... nothing.

    Now, at 1, it turns out your chance to succeed can very well be VERY negative when we enter the Mastery code, <cut>
    Thank you for the clarification. Means less time pondering and more time with EQ for me. (I had an option in the code to switch between the 2 different behaviours but now I can remove that, add the skill 0 anomaly, and feel confident that my proggie will be decently accurate. )

  18. #18
    Database Code Monkey KyrosKrane's Avatar
    Join Date
    Dec 2002
    Posts
    4,431
    Quote Originally Posted by Twistagain
    Those are equivalent, Kyroskrane.
    Eh. Like I said, I was woozy and looking at it at 5am after a long session fighting the war in EQ.
    Sir KyrosKrane Sylvanblade
    Master Artisan (300 + GM Trophy in all) of Luclin (Veeshan)
    Master Fisherman (200) and possibly Drunk (2xx + 20%), not sober enough to tell!
    Lightbringer, Redeemer, and Valiant servant of Erollisi Marr

  19. #19
    Database Code Monkey KyrosKrane's Avatar
    Join Date
    Dec 2002
    Posts
    4,431
    OK, I took Twistagain's macro code and modified it a bit, adding in some rudimentary error checking, the alternate formula for low trivial combines, and the the failure reduction check for deeply trivial combines. I also added in a ton of comments. I've put it through some test cases and it seems to work as expected. If anyone finds any bugs, please let me know.

    Code:
    Function SuccessRate(Trivial As Integer, RawSkill As Integer, Optional Modifier As Integer = 0, Optional Mastery As Integer = 0) As Double
    	'Expected Inputs:
    	'Trivial: Integer greater than or equal to zero
    	'RawSkill: Integer in the range of 0 to 300
    	'Modifier: Integer greater than or equal to zero. 5 indicates 5%, etc. This is optional; you may choose to not include it. The default value is no modifier. However, you must include it if you use mastery.
    	'Mastery: Integer from 0 to 3, inclusive. 0 = no mastery, 1 = Crafting Mastery 1, etc. This is optional; you may choose to not include it. The default value is no mastery.
    	
    	'Returns: The predicted average success rate for a given combine, as a Double between 0 and 1, inclusive. Multiply by 100 to get the percentage as a number between 0 and 100.
    	'If invalid arguments are supplied, the function returns -1.
    
    
    	'Error Checking
    	If Trivial < 0 Or RawSkill < 0 Or RawSkill > 300 Or Modifier < 0 Or Mastery < 0 Or Mastery > 3 Then
    		SuccessRate = -1
    		Exit Function
    	End If
        
    	'Combines with trivial 16 or less always succeed:
    	If Trivial <= 15 Then
    		SuccessRate = 1
    		Exit Function
    	End If
    		
    		
    	'The skill modified by a geerlok or similar
    	Dim ModifiedSkill As Double
    	
    	'The base chance of success, before caps are applied
    	Dim PrecapRate As Double
    	
    	'The maximum chance to succeed a combine -- this is calcuated
    	Dim UpperCap As Double
    	
    	'The minimum chance to succeed is fixed
    	Const LowerCap = 0.05
    	
    	
    	'Calculate modified skill to account for geerloks or similar
    	ModifiedSkill = Int(RawSkill * (Modifier / 100 + 1))
    
    	'Calculate the chance of success before the upper and lower caps are applied
    	If Trivial < 68 Then
    		PrecapRate = (ModifiedSkill - Trivial + 66) / 100
    	Else
    		PrecapRate = (ModifiedSkill - 0.75 * Trivial + 51.5) / 100
    	End If
    
    	'Apply mastery if appropriate
    	If RawSkill <> 0 Then
    
    		Select Case Mastery
    			Case 1
    			    'Mastery 1 reduces the chance to fail by 10%
    			    PrecapRate = PrecapRate + ((1 - PrecapRate) * 0.1)
    			Case 2
    			    'Mastery 2 reduces the chance to fail by 25%
    			    PrecapRate = PrecapRate + ((1 - PrecapRate) * 0.25)
    			Case 3
    			    'Mastery 3 reduces the chance to fail by 50%
    			    PrecapRate = PrecapRate + ((1 - PrecapRate) * 0.5)
    		End Select
    
    	End If
    	
    	'Calculate the upper cap for the chance of success
    	If RawSkill >= Trivial + 40 Then
    		'Apply check for very trivial combines; it can reduce the chance to fail slightly
    	   UpperCap = 0.95 + (Int((RawSkill - Trivial) / 40)) / 100
    	   
    	   'Chance to succeed can never exceed 100%, so check to make sure we never get above that
    	   If UpperCap > 1 Then UpperCap = 1
    	Else
    		UpperCap = 0.95
    	End If
    
    	'Apply upper and lower caps, and return the appropriate result
    	If PrecapRate > UpperCap Then
    		SuccessRate = UpperCap
    	ElseIf PrecapRate < LowerCap Then
    		SuccessRate = LowerCap
    	Else
    		SuccessRate = PrecapRate
    	End If
    
    End Function
    This still doesn't account for the minimum chance to fail that can be applied to some combines. However, since we don't have any confirmed values for minimum fail rate, I figured we may as well skip it for now.

    Edit: This code is significantly NOT optimized. It's written to promote readability. There are a ton of optimizations that could be done to speed it up. I'll leave that as an exercise for the capable reader. =)

    Edit 2: Fixed a minor bug relating to skill modifying items.

    Edit 3: Added the no-fail code.

    Edit 4: Cleaned up the code on raising the success cap for deeply trivial combines. This should account for some odd corner cases.

    Edit 5: Corrected the no-fail code to work with trivial 15 or less.
    Last edited by KyrosKrane; 07-29-2005 at 06:53 PM.
    Sir KyrosKrane Sylvanblade
    Master Artisan (300 + GM Trophy in all) of Luclin (Veeshan)
    Master Fisherman (200) and possibly Drunk (2xx + 20%), not sober enough to tell!
    Lightbringer, Redeemer, and Valiant servant of Erollisi Marr

  20. #20
    House Ogre
    SOE-DEV
    Ngreth Thergn's Avatar
    Join Date
    Jul 2003
    Posts
    6,483
    Quote Originally Posted by Tanker
    Ok, fine, you guys got me curious.

    Turns out there's a little thing in the code that doesn't use Mastery AA's unless your skill is MORE than 0, so at 0... nothing.
    Arg! more changes to that blasted page!

    Thanks though Tanker!!!
    Ngreth Thergn

    Ngreth nice Ogre. Ngreth not eat you. Well.... Ngreth not eat you if you still wiggle!
    Grandmaster Smith 250
    Master Tailor 200
    Ogres not dumb - we not lose entire city to froggies

  21. #21
    House Ogre
    SOE-DEV
    Ngreth Thergn's Avatar
    Join Date
    Jul 2003
    Posts
    6,483
    here is my code, minus the form and basic page layout HTML
    Code:
    /***************************************************************************
    // Make sure all data sent to the sheet is within allowable parameters
    //
    // skill: from 0 to 300 inclusive
    // prime: Prime Stat no lower than 0 (curently no cap set since this bar keeps moving).  Form limits to 999
    // trivial: no lower than 0.  No max set since no max has been indicated.  Form limits to 999
    // mod: tradeskill mod limited from 0 to 100 inclusive.
    */
    
    if ($data) {
    	if ($data['skill'] < 1) $data['skill'] = '0';
    	if ($data['skill'] > 300) $data['skill'] = 300;
    	if ($data['prime'] < 1) $data['prime'] = '0';
    	//if ($data['prime'] > 405) $data['prime'] = 405;
    	if ($data['trivial'] < 1) $data['trivial'] = '0';
    	if ($data['mod'] < 1) $data['mod'] = '0';
    	if ($data['mod'] > 100) $data['mod'] = 100;
    }
    
    /***************************************************************************
    // HTML form display bellow
    */?>
    
    HTML cut out here...
    
    <?php
    /***************************************************************************
    //
    // If data is set.  start the table below the HTML form
    */
    if (isset($data)) {
    	print "<table cellpadding=\"2\" hspace=\"10\" bordercolor=\"#400000\" border=\"2\" cellspacing=\"0\">
        <tr bgcolor=\"#E3E4D3\"><td>";
    
    	//set a modified skill value
    	$skill = floor($data['skill']*(100+$data['mod'])/100);  
    	
    	//run the base success formula as decided by the community
    	if ($data['trivial'] < 68) {
    		$success = $skill - $data['trivial'] + 66;
    	} else {
    		$success = ($skill-($data['trivial'] * 0.75)) + 51.5;
    	}
    
    	// If skill is 0, ignore tradeskill AA 
    	// if skill is greater, calculate the fail modifier to success, and increment success by that.
    	if ($data['skill'] > 0) {
    		$fail = 100-$success;
    		$fail = $aa*$fail/100;
    		$success += $fail;
    	} 
    
    	//cap success
    	if ($success < 5) $success = 5;
    	if ($success > 95) $success = 95;
    	//as skill gets greater than trivial, in steps of 40, reduce the chance to fail further.
    	//this could probably be done formulaicly instead of conditionally
    	if ($data['skill'] > $data['trivial']) {
    		if (($data['skill']-$data['trivial']) >= 200) {
    			$success = 100;
    		} else if (($data['skill']-$data['trivial']) >= 160) {
    			$success = 100 - ((100-$success)*(.20));
    		} else if (($data['skill']-$data['trivial']) >= 120) {
    			$success = 100 - ((100-$success)*(.40));
    		} else if (($data['skill']-$data['trivial']) >= 80) {
    			$success = 100 - ((100-$success)*(.60));
                    } else if (($data['skill']-$data['trivial']) >= 40) {
    			$success = 100 - ((100-$success)*(.80));
    		} 
    	}
    	
    	
    	//display the new calculated data
    	print "Ajusted Skill = $skill<br>";
    	print "Success chance = $success%<br>";
    	
    	/***************************************************************************
    	// calculate the success chances.  Sorry about the nonsense variable names, I was making them for the original formulas
    	// from soe.
    	// Also $si is an array for easy future changes when all data for tradeskill dificulties are in and I make a dropdown 
    	// with the apropriate data.
    	//
    	// $s = stat
    	// $si[0] = tradeskill dificulty
    	// $si[1] = is the flag (1|0) for if there is an alternate stat
    	// $second = second check.  Used to signify the chance for skillup on the second pass.
    	// n is used to signify the chance of skillup on first pass
    	// $nf = n for failed combine.  (n was used in original formula given by SOE.)  N is the FIRST check.
    	// $ns = n for success.  (again, this is the first check)
    	// $suf = skillup chance on a failed combine.
    	// $sus = skillup chance on a combine that succeded.
    	// $sut = overall chance of skillup
    	//
    	*/
    	if (($data['trivial'] > $data['skill']) and ($data['skill'] < 300)) {
    		// standby code for if I implement the dropdown
    		//$si=split('-',$data['trade']);
    		
    		// if the stat used is for a tradeskill that has an alternate stat, leave the stat as is
    		// otherwise, reduce the stat by 15.  It cannot be less than 0.
    		if ($si[1]) {
    			$s = $data['prime'];
    		} else {
    			$s = $data['prime']-15;
    		}
    		if ($s < 0) $s=0;
    		
    		// calculate the chance of skillup from pass one.
    		// note that there is half the chance if the combine was a fialure
    		// cap both at 100
    		$nf = ($s*10)/($si[0]*2)/10;
    		$ns = ($s*10)/$si[0]/10;
    		if ($ns > 100) $ns = 100;
    		if ($nf > 100) $nf = 100;
    		
    		// calculate the chance of skillup from pass two.
    		//
    		// if BASE skill is less than or equal to 15, pass two is 100%
    		// or do the new formula is the base skill is greater than 175
    		// else, the skill is between 15 and 176, use the old formula
    		//
    		if ($data['skill'] <= 15) {
    			$second = 1;
    		} else if ($data['skill'] > 175) {
    			$second = (12.5-((10/125.0)*($data['skill']-175)))/100;
    		} else {
    			$second = (200-$data['skill'])/200;
    		}
    		
    		// round the two chances, and make a total chance.
    		$suf = round($nf*$second,2);
    		$sus = round($ns*$second,2);
    		$sut = round((($sus*$success/100) + ($suf*(100-$success)/100)),2);
    	} else { // if base skill is higher than the trivial, or base skill is 300 (or more) there is no chance of skillup.
    		$sus = 0;
    		$suf = 0;
    		$sut = 0;
    	}
    	
    	print "Chance of skill up on Success: $sus%, on failure: $suf%, <strong>overall $sut%</strong>"; 
    	print "</td></tr></table>";
    }
    ?>
    Last edited by Ngreth Thergn; 07-29-2005 at 11:07 AM.
    Ngreth Thergn

    Ngreth nice Ogre. Ngreth not eat you. Well.... Ngreth not eat you if you still wiggle!
    Grandmaster Smith 250
    Master Tailor 200
    Ogres not dumb - we not lose entire city to froggies

  22. #22
    Database Code Monkey KyrosKrane's Avatar
    Join Date
    Dec 2002
    Posts
    4,431
    Ngreth, I eyeballed your code, and it looks right. Just a couple of quick comments.

    First, you helped me catch two bugs in my code. Thanks! =)

    Second, you don't show where you set the value $aa. I'm assuming that gets set correctly in the chunks you removed.

    Third, combines with trivial 16 or less are no-fail. In fact, I don't think it's possible to have a trivial less than 16, since that means the combine difficulty (which is the underlying variable used to determine the trivial) is less than zero.

    Fourth, about the reduction of fail rates for very trivial combines. What happens is that the upper cap on the chance to succeed is raised -- which isn't the same thing as reducing the fail rate. However, your code works since every time that code kicks in, the chance to succeed is already at 95%. Still, I would recommend changing the following block:
    Code:
    	//as skill gets greater than trivial, in steps of 40, reduce the chance to fail further.
    	//this could probably be done formulaicly instead of conditionally
    	if ($data['skill'] > $data['trivial']) {
    		if (($data['skill']-$data['trivial']) >= 200) {
    			$success = 100;
    		} else if (($data['skill']-$data['trivial']) >= 160) {
    			$success = 100 - ((100-$success)*(.20));
    		} else if (($data['skill']-$data['trivial']) >= 120) {
    			$success = 100 - ((100-$success)*(.40));
    		} else if (($data['skill']-$data['trivial']) >= 80) {
    			$success = 100 - ((100-$success)*(.60));
            } else if (($data['skill']-$data['trivial']) >= 40) {
    			$success = 100 - ((100-$success)*(.80));
    		} 
    	}
    To this:
    Code:
    	//as skill gets greater than trivial, in steps of 40, reduce the chance to fail further.
    	if ($data['skill'] >= $data['trivial'] + 40) {
    		$success = 95 + floor(($data['skill'] - $data['trivial']) / 40);
    	}
    This also implements the formulaic change you mentioned.

    Other than that, it all looks good. =)
    Sir KyrosKrane Sylvanblade
    Master Artisan (300 + GM Trophy in all) of Luclin (Veeshan)
    Master Fisherman (200) and possibly Drunk (2xx + 20%), not sober enough to tell!
    Lightbringer, Redeemer, and Valiant servant of Erollisi Marr

  23. #23
    Trader
    Join Date
    Feb 2005
    Posts
    375
    Third, combines with trivial 16 or less are no-fail. In fact, I don't think it's possible to have a trivial less than 16, since that means the combine difficulty (which is the underlying variable used to determine the trivial) is less than zero.
    Please correct me with a reference, but I was under the impression that 15 and under is no-fail regardless of level. I've noticed that things like GM metal sheets (when one converts them from a brick to sheet) is 15. Rallic packs are 15, etc. I've also noticed things that are trivial 16 that are failable namely the unfired and fired artisan's seal for the GM trophies. Lots more examples I am sure but those come to mind.

  24. #24
    Database Code Monkey KyrosKrane's Avatar
    Join Date
    Dec 2002
    Posts
    4,431
    I'll go back and double check; I could be off by one.
    Sir KyrosKrane Sylvanblade
    Master Artisan (300 + GM Trophy in all) of Luclin (Veeshan)
    Master Fisherman (200) and possibly Drunk (2xx + 20%), not sober enough to tell!
    Lightbringer, Redeemer, and Valiant servant of Erollisi Marr

  25. #25
    Database Code Monkey KyrosKrane's Avatar
    Join Date
    Dec 2002
    Posts
    4,431
    OK, here's my line of thought. This is kinda stream of consciousness.

    You're right, no-fail recipes seem to be trivial 15. This can easily be verified as you can skill up to that point on them -- e.g., making silk thread or silk swatches.

    Off the top of my head, I remember Tanker saying trivial 16 combines were no-fail two Fan Faires ago, but it was a comment in passing and I wasn't paying too much attention -- not to mention that my memory has faded since then. On the other hand, I do remember when the new interface went live, all trivials appeared in the UI to be off by one from what we had expected. This was fixed within a day or so.

    Difficulty 0 = Trivial 16.
    Difficulty -1 = Trivial 15.

    This presents a problem of elegance. Previous to OoW, the highest known difficulty item was trivial 335, which works out to difficulty 250. In Omens, we got some stuff with trivial 351, which works out to difficulty 262. This was the first time we had a confirmed difficulty over 255 -- a magic number in computers, as it tells us something about the nature of how the program is written.

    Given this, I'm a bit uncomfortable with -1 as a valid difficulty value. And yet, it must be, which calls into question the reliability of the assumption that until Omens, the highest possible difficulty was 255. It also begets the question of whether lower difficulties are possible, and what those values would mean -- would quest combines have difficulty -16, for example, leading to trivial 0? Or -15, giving trivial 1, since you never get a trivial message on non-tradeskill quest combines? It raises a host of interesting questions.

    There's an easy way to test. Make a newbie toon, and have him make class 1 wood point arrow (large groove). Should only cost a few silver per try. If even one fails, then we know for sure that trivial 16 is failable.

    However, I'm going to pre-emptively correct my formula to use 15 as a no-fail combine.
    Last edited by KyrosKrane; 07-29-2005 at 06:05 PM.
    Sir KyrosKrane Sylvanblade
    Master Artisan (300 + GM Trophy in all) of Luclin (Veeshan)
    Master Fisherman (200) and possibly Drunk (2xx + 20%), not sober enough to tell!
    Lightbringer, Redeemer, and Valiant servant of Erollisi Marr

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •