Depending on how you have a service check configured and what service check you are making, it may never go to warning (plugin dependant) I could write a plugin that never goes to critical but only to a warning state. Does that make sense? It all depends on the plugin.
But assuming that we are using a check like check_snmp, that has a -w (warning) and -c (critical) state, when the service check is made, let's assume it gives a critical for a return value OK? Nagios will show it as critical, but depending on how I have the retry setup, it will not send out notifications yet, since it's still in the SOFT state. Mine checks are setup to have to retry FIVE times, and so on the 5th try, if the check STILL fails, it will then and only then, send out a notification. It's important that you set the retry level high enough, because you don't want to be emailed with every single failure if you haven't at least tried the check 5 times or so.
It makes no sense to write a plugin like check_snmp, that allows you to check disc space on some other machine, that let's you set warning and critical levels, and now you want to change that plugin to report a "warning" only, on the first 3 checks, and go critical on the 4th check? Why would you want it to go critical when only the warning level of disc space has been reached? I don't get it.
I realize fully that what you wish for is nagios to display the yellow warning, since the check only failed once or twice, and then on the 4th check to go red-critical. But you might have failed to notice that the red critical message was still in the "SOFT" state, and has not yet sent out any notifications.
Think about it.