private static function ParseDescription($SpellData, $DescriptionString) { $DescriptionString = strtr($DescriptionString, array("\r" => '', "\n" => '<br />')); $DescriptionString = self::replaceBrackets($DescriptionString); $Modifiers = array('+', '-', '/', '*', '^'); $SubSpells = array(); $ModifierWasFound = false; $DurationChanged = false; $UsedModifier = ""; foreach ($Modifiers as $Modifier) { if (strstr(substr($DescriptionString, strpos($DescriptionString, '$')), $Modifier)) { $Explode = explode($Modifier, substr($DescriptionString, strpos($DescriptionString, '$'))); $SpellID = $Explode[0]; $UsedModifier = $Modifier; if (strstr($Explode[1], ';')) { @($SecondExplode = explode(';', $Explode[1])); $ExplodedWith = ';'; } else { @($SecondExplode = explode(' ', $Explode[1])); $ExplodedWith = ' '; } $Duration = $SecondExplode[0]; $SubSpells[] = @array(str_replace('.', '', $SecondExplode[1])); $ModifierWasFound = true; } } preg_match_all('!\\$\\w+\\D\\d?!', $DescriptionString, $SubSpells); if (empty($SubSpells[0])) { preg_match_all('!\\$\\D\\d?!', $DescriptionString, $SubSpells); } $SubSpells = call_user_func_array('array_merge', $SubSpells); $SubSpellsData = Spells::ParseSubSpells($SubSpells); if (isset($Duration)) { $OldDuration = ""; if (strstr($Duration, '$')) { $DurationChanged = true; $OldDuration = $Duration; $Data = self::ParseSubSpells([$Duration])[0]; $ParseResult = Spells::ArgumentParser($SpellData, $Data['SpellID'], $Data['Argument'], $Data['ArgumentValue']) . ' '; $Duration = $ParseResult; $Unset = Text::Search($SubSpellsData, ['SpellID' => $Data['SpellID'], 'Argument' => $Data['Argument']])[0]; unset($SubSpellsData[$Unset]); } } foreach ($SubSpellsData as $SubSpell) { if ($ModifierWasFound == false) { $ParseResult = Spells::ArgumentParser($SpellData, $SubSpell['SpellID'], $SubSpell['Argument'], $SubSpell['ArgumentValue']) . ' '; $Replacement = '$' . $SubSpell['SpellID'] . $SubSpell['Argument'] . $SubSpell['ArgumentValue']; $DescriptionString = str_replace($Replacement, $ParseResult, $DescriptionString); } else { $ParseResult = Spells::ArgumentParser($SpellData, $SubSpell['SpellID'], $SubSpell['Argument'], $SubSpell['ArgumentValue'], $UsedModifier . $Duration); if ($DurationChanged) { if (strstr($SubSpell['SpellID'], '*') || strstr($SubSpell['Argument'], '*') || strstr($SubSpell['ArgumentValue'], '*')) { $Replacement = '$' . $SubSpell['SpellID'] . $SubSpell['Argument'] . $SubSpell['ArgumentValue'] . $OldDuration; } else { $Replacement = '$' . $SubSpell['SpellID'] . $SubSpell['Argument'] . $SubSpell['ArgumentValue']; } } else { $Replacement = '$' . $UsedModifier . $Duration . $ExplodedWith . $SecondExplode[1]; } $DescriptionString = str_replace($Replacement, $ParseResult, $DescriptionString); } } return $DescriptionString; }
private static function ParseDescription($SpellData, $DescriptionString) { $DescriptionString = strtr($DescriptionString, array("\r" => '', "\n" => '<br />')); $Modifiers = array('+', '-', '/', '*', '^'); $SubSpells = array(); $ModifierWasFound = false; foreach ($Modifiers as $Modifier) { if (strstr($DescriptionString, $Modifier)) { $Explode = explode($Modifier, substr($DescriptionString, strpos($DescriptionString, '$'))); $SpellID = $Explode[0]; $UsedModifier = $Modifier; @($SecondExplode = explode(';', $Explode[1])); $Duration = $SecondExplode[0]; $ExplodedWith = ';'; $SubSpells[] = @array(str_replace('.', '', $SecondExplode[1])); $ModifierWasFound = true; } } if ($ModifierWasFound == false) { preg_match_all('!\\$\\d+\\D\\d?!', $DescriptionString, $SubSpells); if (empty($SubSpells[0])) { preg_match_all('!\\$\\D\\d?!', $DescriptionString, $SubSpells); } } $SubSpells = call_user_func_array('array_merge', $SubSpells); $SubSpellsData = Spells::ParseSubSpells($SubSpells); foreach ($SubSpellsData as $SubSpell) { if ($ModifierWasFound == false) { $ParseResult = Spells::ArgumentParser($SpellData, $SubSpell['SpellID'], $SubSpell['Argument'], $SubSpell['ArgumentValue']); $Replacement = '$' . $SubSpell['SpellID'] . $SubSpell['Argument'] . $SubSpell['ArgumentValue']; $DescriptionString = str_replace($Replacement, $ParseResult, $DescriptionString); } else { $ParseResult = Spells::ArgumentParser($SpellData, $SubSpell['SpellID'], $SubSpell['Argument'], $SubSpell['ArgumentValue'], $UsedModifier . $Duration); $Replacement = '$' . $UsedModifier . $Duration . $ExplodedWith . $SecondExplode[1]; $DescriptionString = str_replace($Replacement, $ParseResult, $DescriptionString); } } return $DescriptionString; }