--- 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;
}