--- deliantra/server/common/player.C 2008/09/09 10:51:59 1.44 +++ deliantra/server/common/player.C 2009/09/17 00:07:04 1.53 @@ -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; @@ -340,6 +339,9 @@ case '\r': buf << '\n'; + /* \r\n+ becomes one or more newlines */ + while (*cfpod == '\n') + buf << *cfpod++; break; case '\n': @@ -358,7 +360,9 @@ buf << *cfpod++; while (*cfpod == '\n'); } - else if (*cfpod != ' ') + else if (*cfpod == ' ') + buf << '\n'; + else buf << ' '; // verbatim block? @@ -397,6 +401,7 @@ case 'I': pfx = "" ; sfx = "" ; break; case 'U': pfx = "" ; sfx = "" ; break; case 'T': pfx = ""; sfx = ""; break; + case 'Z': pfx = "" ; sfx = "" ; break; case 'H': // hint { @@ -406,24 +411,24 @@ nest.clear (); if (pl->hintmode == 1) - buf << "[Hint suppressed, see hintmode]"; + buf << "[Hint available]"; else - while (*cfpod == ' ') // eat trailing whitespace + while (*cfpod <= ' '&& *cfpod) // eat trailing whitespace ++cfpod; goto skip; } else { - pfx = "["; - sfx = " (Use hintmode to suppress hints)]"; + pfx = "[Hint: "; + sfx = "]"; } } break; 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 (); @@ -431,7 +436,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); @@ -463,12 +468,12 @@ buf << ""; cfpod = expand_cfpod (pl, buf, cfpod, -2); buf << "\n"; + + while (*cfpod == '\n') + buf << *cfpod++; } while (*cfpod == ' '); - while (*cfpod == '\n') - buf << *cfpod++; - break; } }