--- deliantra/server/common/player.C 2008/09/08 18:34:35 1.43 +++ deliantra/server/common/player.C 2009/06/26 16:21:57 1.51 @@ -48,8 +48,7 @@ if (op && op->type == PLAYER && op->arch - && op->arch->race - && !strcmp (op->arch->race, "dragon")) + && op->arch->race == shstr_dragon) return 1; return 0; @@ -294,7 +293,7 @@ // end == 0, till eos // end >= 1, levels of " >>>" static const char * -expand_cfpod (const player *pl, dynbuf_text &buf, const char *cfpod, int end) +expand_cfpod (const player *pl, dynbuf_text &buf, const char *cfpod, int end = 0) { static dynbuf_text nest(128, 128); @@ -305,6 +304,13 @@ return cfpod - 1; case ' ': + // verbatim block? + if (!buf.size () && !end) + { + --cfpod; + goto verbatim; + } + if (end < 1) goto passthrough; @@ -351,24 +357,14 @@ buf << *cfpod++; while (*cfpod == '\n'); } - else if (*cfpod != ' ') + else if (*cfpod == ' ') + buf << '\n'; + else buf << ' '; - // start verbatim block's? + // verbatim block? if (*cfpod == ' ') - { - // elements cannot currently span multiple lines - do - { - buf << ""; - cfpod = expand_cfpod (pl, buf, cfpod, -2); - buf << "\n"; - } - while (*cfpod == ' '); - - while (*cfpod == '\n') - buf << *cfpod++; - } + goto verbatim; break; @@ -402,6 +398,7 @@ case 'I': pfx = "" ; sfx = "" ; break; case 'U': pfx = "" ; sfx = "" ; break; case 'T': pfx = ""; sfx = ""; break; + case 'Z': pfx = "" ; sfx = "" ; break; case 'H': // hint { @@ -428,7 +425,7 @@ case 'G': // gender { - expand_cfpod (pl, nest, cfpod, end); + cfpod = expand_cfpod (pl, nest, cfpod, end); nest << '\0'; // zero-terminate const char *str = nest.linearise (); @@ -436,7 +433,7 @@ if (sep) { - if (pl->gender || 1) + if (pl->gender) buf.add (sep + 1, nest.size () - (sep - str) - 2); else buf.add (str, sep - str); @@ -460,6 +457,21 @@ buf << ch; skip: break; + + verbatim: + // elements cannot currently span multiple lines + do + { + buf << ""; + cfpod = expand_cfpod (pl, buf, cfpod, -2); + buf << "\n"; + + while (*cfpod == '\n') + buf << *cfpod++; + } + while (*cfpod == ' '); + + break; } } @@ -469,7 +481,7 @@ static dynbuf_text buf(1024, 1024); buf.clear (); - ::expand_cfpod (this, buf, cfpod, 0); + ::expand_cfpod (this, buf, cfpod); return &buf; }