Edited after I realized your actual problem. You just need to keep track of the soft status as you loop. Use ace as 1 by default.

$calcC(...) = hard total eg: 17
$calcC().soft = soft total eg: 7
$calcC().softReadable = for display eg: 7/17

Use hard totals for most things..

Code:
alias calcC {
  var %Ccards $gettok($hget(cards,$1),0,44), %soft = 0, %x = 0
  while (%Ccards) {
    var %cardNum $gettok($hget(cards,$1),%Ccards,44)
    var %cardNumb $gettok(%cardNum,1,46)
    if (%cardNumb isnum) {
      var %CcardsT $calc(%cardNumb + %CcardsT) 
    }
    elseif (%cardNumb == A) {
      var %cardNumb 1
      if (!%soft) && (%CcardsT < 12) %soft = 1
      var %CcardsT $calc(%cardNumb + %CcardsT)
    }
    else {
      var %cardNumb 10 
      var %CcardsT $calc(%cardNumb + %CcardsT) 
    }
    if (%soft) && (%CcardsT > 11) %soft = 0
    dec %Ccards
    inc %x
  }
  ; to return something else for blackjack, replace
  ; $iif(%x == 2,21,21) with $iif(%x == 2,newReturn,21)
  if (%soft) {
    if (%CcardsT == 11) return $iif(%x == 2,21,21)
    if ($prop == soft) return %CcardsT
    elseif ($prop == softReadable) return $+(%CcardsT,/,$calc(%CcardsT + 10))
    else return $calc(%CcardsT + 10)
  }
  return %CcardsT
}

Last edited by Degausser; 21/11/17 11:58 PM.