Crossfire Server, Trunk  1.75.0
c_chat.cpp
Go to the documentation of this file.
1 /*
2  * Crossfire -- cooperative multi-player graphical RPG and adventure game
3  *
4  * Copyright (c) 1999-2014 Mark Wedel and the Crossfire Development Team
5  * Copyright (c) 1992 Frank Tore Johansen
6  *
7  * Crossfire is free software and comes with ABSOLUTELY NO WARRANTY. You are
8  * welcome to redistribute it under certain conditions. For details, please
9  * see COPYING and LICENSE.
10  *
11  * The authors can be reached via e-mail at <crossfire@metalforge.org>.
12  */
13 
19 #include "global.h"
20 
21 #include <stdlib.h>
22 #include <string.h>
23 
24 #include "loader.h"
25 #include "sproto.h"
26 
34 void command_say(object *op, const char *params) {
35  if (*params == '\0')
36  return;
37  monster_communicate(op, params);
38 }
39 
47 void command_me(object *op, const char *params) {
48  char buf[MAX_BUF];
49 
50  if (*params == '\0')
51  return;
52  snprintf(buf, sizeof(buf), "%s %s", op->name, params);
54  buf);
55 }
56 
64 void command_cointoss(object *op, const char *params) {
65  char buf[MAX_BUF];
66  const char *result;
67  (void)params;
68 
69  result = rndm(1, 2) == 1 ? "Heads" : "Tails";
70 
72  "You flip a coin.... %s!",
73  result);
74 
75  snprintf(buf, sizeof(buf), "%s flips a coin.... %s!", op->name, result);
77  buf);
78 }
79 
81 static const char *const orcknuckle[7] = {
82  "none",
83  "beholder",
84  "ghost",
85  "knight",
86  "princess",
87  "dragon",
88  "orc"
89 };
90 
91 #define DICE 4
108 void command_orcknuckle(object *op, const char *params) {
109  char buf[MAX_BUF];
110  char buf2[MAX_BUF];
111  object *dice[DICE];
112  int i, j, k, l, dice_count, number_dice;
113  const char *name;
114  (void)params;
115 
116  /* We only use dice if the archetype is present ingame. */
117  name = find_string("dice");
118  if (name) {
119  for (dice_count = 0; dice_count < DICE; dice_count++)
120  dice[dice_count] = NULL;
121  dice_count = 0;
122  number_dice = 0;
123 
124  FOR_INV_PREPARE(op, ob) {
125  if (dice_count >= DICE || number_dice >= DICE)
126  break;
127  if (ob->name == name) {
128  number_dice += ob->nrof;
129  dice[dice_count++] = ob;
130  }
131  } FOR_INV_FINISH();
132 
133  if (number_dice < DICE) {
135  "You need at least %d dice to play orcknuckle!", DICE);
136  return;
137  }
138  } else {
139  dice_count = 0;
140  }
141 
142  i = rndm(1, 5);
143  j = rndm(1, 5);
144  k = rndm(1, 5);
145  l = rndm(1, 6);
146 
147  snprintf(buf2, sizeof(buf2), "%s rolls %s, %s, %s, %s!", op->name, orcknuckle[i], orcknuckle[j], orcknuckle[k], orcknuckle[l]);
148  snprintf(buf, sizeof(buf), "You roll %s, %s, %s, %s!", orcknuckle[i], orcknuckle[j], orcknuckle[k], orcknuckle[l]);
149 
151  buf);
153  buf2);
154 
155  if (name) {
156  /* Randomly lose dice */
157  if (die_roll(1, 100, op, 1) < 5) {
158  /* Lose one randomly. */
159  object_decrease_nrof_by_one(dice[rndm(1, dice_count)-1]);
161  "Oops, you lost a die!");
162  }
163  }
164 #undef DICE
165 }
166 
183 static void command_tell_all(object *op, const char *params, int pri, int color, int subtype, const char *desc) {
184  if (op->contr->no_shout == 1) {
186  "You are no longer allowed to shout or chat.");
187  return;
188  }
189 
190  if (*params == '\0') {
192  "Shout/Chat what?");
193  return;
194  }
195 
197  "%s %s: %s",
198  op->name, desc, params);
199 
200  events_execute_global_event(EVENT_SHOUT, op, params, pri);
201 }
202 
210 void command_shout(object *op, const char *params) {
211  command_tell_all(op, params, 1, NDI_RED, MSG_TYPE_COMMUNICATION_SHOUT, "shouts");
212 }
213 
221 void command_chat(object *op, const char *params) {
222  command_tell_all(op, params, 9, NDI_BLUE, MSG_TYPE_COMMUNICATION_CHAT, "chats");
223 }
224 
235 static void do_tell(object *op, const char *params, int adjust_listen) {
236  char buf[MAX_BUF], name[MAX_BUF];
237  char *msg = NULL;
238  player *pl;
239  uint8_t original_listen;
240 
241  strlcpy(name, params, sizeof(name));
242 
243  msg = strchr(name, ' ');
244  if (msg) {
245  (*msg) = '\0';
246  msg++;
247  if ((*msg) == '\0')
248  msg = NULL;
249  }
250 
251  if (strlen(name) == 0) {
253  "Tell whom what?");
254  return;
255  }
256 
257  if (msg == NULL) {
259  "Tell %s what?",
260  name);
261  return;
262  }
263 
264  snprintf(buf, sizeof(buf), "%s tells you: %s", op->name, msg);
265 
267  if (pl) {
268  if (adjust_listen) {
269  original_listen = pl->listening;
270  pl->listening = 10;
271  } else {
272  original_listen = 0;
273  }
274 
276 
278  buf);
279 
280  if (adjust_listen)
281  pl->listening = original_listen;
282 
283  /* Update last_tell value [mids 01/14/2002] */
284  strlcpy(pl->last_tell, op->name, sizeof(pl->last_tell));
285 
286  /* Hidden DMs get the message, but player should think DM isn't online. */
287  if (!pl->hidden || QUERY_FLAG(op, FLAG_WIZ)) {
289  "You tell %s: %s",
290  pl->ob->name, msg);
291 
292  return;
293  }
294  }
295 
297  "No such player or ambiguous name.");
298 }
299 
308 void command_tell(object *op, const char *params) {
309  do_tell(op, params, 0);
310 }
311 
320 void command_dmtell(object *op, const char *params) {
321  do_tell(op, params, 1);
322 }
323 
336 void command_reply(object *op, const char *params) {
337  player *pl;
338 
339  if (*params == '\0') {
341  "Reply what?");
342  return;
343  }
344 
345  if (op->contr->last_tell[0] == '\0') {
347  "You can't reply to nobody.");
348  return;
349  }
350 
351  /* Find player object of player to reply to and check if player still exists */
352  pl = find_player(op->contr->last_tell);
353  if (pl == NULL) {
355  "You can't reply, this player left.");
356  return;
357  }
358 
359  /* Update last_tell value */
360  safe_strncpy(pl->last_tell, op->name, MAX_NAME);
361 
363  "%s tells you: %s",
364  op->name, params);
365 
366  if (pl->hidden && !QUERY_FLAG(op, FLAG_WIZ)) {
368  "You can't reply, this player left.");
369  return;
370  }
371 
373  "You tell to %s: %s",
374  pl->ob->name, params);
375 }
376 
381 #define EMOTE_FIRST 0
382 #define EMOTE_NOD 1
383 #define EMOTE_DANCE 2
384 #define EMOTE_KISS 3
385 #define EMOTE_BOUNCE 4
386 #define EMOTE_SMILE 5
387 #define EMOTE_CACKLE 6
388 #define EMOTE_LAUGH 7
389 #define EMOTE_GIGGLE 8
390 #define EMOTE_SHAKE 9
391 #define EMOTE_PUKE 10
392 #define EMOTE_GROWL 11
393 #define EMOTE_SCREAM 12
394 #define EMOTE_SIGH 13
395 #define EMOTE_SULK 14
396 #define EMOTE_HUG 15
397 #define EMOTE_CRY 16
398 #define EMOTE_POKE 17
399 #define EMOTE_ACCUSE 18
400 #define EMOTE_GRIN 19
401 #define EMOTE_BOW 20
402 #define EMOTE_CLAP 21
403 #define EMOTE_BLUSH 22
404 #define EMOTE_BURP 23
405 #define EMOTE_CHUCKLE 24
406 #define EMOTE_COUGH 25
407 #define EMOTE_FLIP 26
408 #define EMOTE_FROWN 27
409 #define EMOTE_GASP 28
410 #define EMOTE_GLARE 29
411 #define EMOTE_GROAN 30
412 #define EMOTE_HICCUP 31
413 #define EMOTE_LICK 32
414 #define EMOTE_POUT 33
415 #define EMOTE_SHIVER 34
416 #define EMOTE_SHRUG 35
417 #define EMOTE_SLAP 36
418 #define EMOTE_SMIRK 37
419 #define EMOTE_SNAP 38
420 #define EMOTE_SNEEZE 39
421 #define EMOTE_SNICKER 40
422 #define EMOTE_SNIFF 41
423 #define EMOTE_SNORE 42
424 #define EMOTE_SPIT 43
425 #define EMOTE_STRUT 44
426 #define EMOTE_THANK 45
427 #define EMOTE_TWIDDLE 46
428 #define EMOTE_WAVE 47
429 #define EMOTE_WHISTLE 48
430 #define EMOTE_WINK 49
431 #define EMOTE_YAWN 50
432 #define EMOTE_BEG 51
433 #define EMOTE_BLEED 52
434 #define EMOTE_CRINGE 53
435 #define EMOTE_THINK 54
436 #define EMOTE_LAST 55
437 
445 static const char* single_emotes[EMOTE_LAST - 1][2] = {
446  { "You nod solemnly.", "%s nods solemnly." },
447  { "You dance with glee.", "%s expresses himself through interpretive dance." },
448  { "All the lonely people...", "%s makes a weird facial contortion" },
449  { "BOIINNNNNNGG!", "%s bounces around." },
450  { "You smile happily.", "%s smiles happily." },
451  { "You cackle gleefully.", "%s throws back his head and cackles with insane glee!" },
452  { "You fall down laughing.", "%s falls down laughing." },
453  { "You giggle.", "%s giggles." },
454  { "You shake your head.", "%s shakes his head." },
455  { "Bleaaaaaghhhhhhh!", "%s pukes." },
456  { "Grrrrrrrrr....", "%s growls." },
457  { "ARRRRRRRRRRGH!!!!!", "%s screams at the top of his lungs!" },
458  { "You sigh.", "%s sighs loudly." },
459  { "You sulk.", "%s sulks in the corner." },
460  { NULL, NULL },
461  { "Waaaaaaahhh...", "%s bursts into tears." },
462  { NULL, NULL },
463  { NULL, NULL },
464  { "You grin evilly.", "%s grins evilly." },
465  { "You bow deeply.", "%s bows deeply." },
466  { "Clap, clap, clap.", "%s gives a round of applause." },
467  { "Your cheeks are burning.", "%s blushes." },
468  { "You burp loudly.", "%s burps loudly." },
469  { "You chuckle politely", "%s chuckles politely." },
470  { "Yuck, try to cover your mouth next time!", "%s coughs loudly." },
471  { "You flip head over heels.", "%s flips head over heels." },
472  { "What's bothering you?", "%s frowns." },
473  { "You gasp in astonishment.", "%s gasps in astonishment." },
474  { "You glare at nothing in particular.", "%s glares around him." },
475  { "You groan loudly.", "%s groans loudly." },
476  { "*HIC*", "%s hiccups." },
477  { "You lick your mouth and smile.", "%s licks his mouth and smiles." },
478  { "Aww, don't take it so hard.", "%s pouts." },
479  { "Brrrrrrrrr.", "%s shivers uncomfortably." },
480  { "You shrug.", "%s shrugs helplessly." },
481  { NULL, NULL },
482  { "You smirk.", "%s smirks." },
483  { "PRONTO! You snap your fingers.", "%s snaps his fingers." },
484  { "Gesundheit!", "%s sneezes." },
485  { "You snicker softly.", "%s snickers softly." },
486  { "You sniff sadly. *SNIFF*", "%s sniffs sadly." },
487  { "Zzzzzzzzzzzzzzz.", "%s snores loudly." },
488  { "You spit over your left shoulder.", "%s spits over his left shoulder." },
489  { "Strut your stuff.", "%s struts proudly." },
490  { NULL, NULL },
491  { "You patiently twiddle your thumbs.", "%s patiently twiddles his thumbs." },
492  { "You wave.", "%s waves happily." },
493  { "You whistle appreciatively.", "%s whistles appreciatively." },
494  { "Have you got something in your eye?", "%s winks suggestively." },
495  { "You open up your yap and let out a big breeze of stale air.", "%s yawns sleepily." },
496  { NULL, NULL },
497  { "You bleed all over your nice new armour.", "%s is bleeding all over the carpet - got a spare tourniquet?" },
498  { "You cringe in terror.", "%s cringes in terror!" },
499  { "Anything in particular that you'd care to think about?", "%s closes his eyes and thinks really hard." },
500 };
507 static const char* self_emotes[EMOTE_LAST - 1][2] = {
508  { "My god! is that LEGAL?", "You look away from %s." },
509  { "You skip and dance around by yourself.", "%s embraces himself and begins to dance!"},
510  { NULL, NULL },
511  { NULL, NULL },
512  { NULL, NULL },
513  { NULL, NULL },
514  { "Laugh at yourself all you want, the others won't understand." "%s is laughing at something." },
515  { NULL, NULL },
516  { "You are shaken by yourself.", "%s shakes and quivers like a bowlful of jelly." },
517  { "You puke on yourself.", "%s pukes on his clothes." },
518  { NULL, NULL },
519  { NULL, NULL },
520  { NULL, NULL },
521  { NULL, NULL },
522  { "You hug yourself.", "%s hugs himself." },
523  { "You cry to yourself.", "%s sobs quietly to himself." },
524  { "You poke yourself in the ribs, feeling very silly.", "%s pokes himself in the ribs, looking very sheepish." },
525  { "You accuse yourself.", "%s seems to have a bad conscience." },
526  { NULL, NULL },
527  { "You kiss your toes.", "%s folds up like a jackknife and kisses his own toes." },
528  { NULL, NULL },
529  { NULL, NULL },
530  { NULL, NULL },
531  { NULL, NULL },
532  { NULL, NULL },
533  { NULL, NULL },
534  { "You frown at yourself.", "%s frowns at himself." },
535  { NULL, NULL },
536  { "You glare icily at your feet, they are suddenly very cold.", "%s glares at his feet, what is bothering him?" },
537  { NULL, NULL },
538  { NULL, NULL },
539  { "You lick yourself.", "%s licks himself - YUCK." },
540  { NULL, NULL },
541  { NULL, NULL },
542  { NULL, NULL },
543  { "You slap yourself, silly you.", "%s slaps himself, really strange..." },
544  { NULL, NULL },
545  { NULL, NULL },
546  { "You sneeze on yourself, what a mess!", "%s sneezes, and covers himself in a slimy substance." },
547  { NULL, NULL },
548  { "You sniff yourself.", "%s sniffs himself." },
549  { NULL, NULL },
550  { "You drool all over yourself.", "%s drools all over himself." },
551  { NULL, NULL },
552  { "You thank yourself since nobody else wants to!", "%s thanks himself since you won't." },
553  { NULL, NULL },
554  { "Are you going on adventures as well??", "%s waves goodbye to himself."},
555  { "You whistle while you work.", "%s whistles to himself in boredom." },
556  { "You wink at yourself?? What are you up to?", "%s winks at himself - something strange is going on..." },
557  { NULL, NULL },
558  { NULL, NULL },
559  { "Very impressive! You wipe your blood all over yourself.", "%s performs some satanic ritual while wiping his blood on himself." },
560  { NULL, NULL },
561  { NULL, NULL },
562 };
571 static const char* other_emotes[EMOTE_LAST - 1][3] = {
572  { "You nod solemnly to %s.", "%s nods solemnly to you.", "%s nods solemnly to %s." },
573  { "You grab %s and begin doing the Cha-Cha!", "%s grabs you, and begins dancing!", "Yipe! %s and %s are doing the Macarena!" },
574  { "You kiss %s.", "%s kisses you.", "%s kisses %s." },
575  { "You bounce around the room with %s.", "%s bounces around the room with you.", "%s bounces around the room with %s." },
576  { "You smile at %s.", "%s smiles at you.", "%s beams a smile at %s." },
577  { NULL, NULL, NULL },
578  { "You take one look at %s and fall down laughing.", "%s looks at you and falls down on the ground laughing.", "%s looks at %s and falls down on the ground laughing." },
579  { NULL, NULL, NULL },
580  { "You shake %s's hand.", "%s shakes your hand.", "%s shakes %s's hand." },
581  { "You puke on %s.", "%s pukes on your clothes!", "%s pukes on %s." },
582  { NULL, NULL, NULL },
583  { NULL, NULL, NULL },
584  { NULL, NULL, NULL },
585  { NULL, NULL, NULL },
586  { "You hug %s.", "%s hugs you.", "%s hugs %s." },
587  { "You cry on %s's shoulder.", "%s cries on your shoulder.", "%s cries on %s's shoulder." },
588  { "You poke %s in the ribs.", "%s pokes you in the ribs.", "%s pokes %s in the ribs." },
589  { "You look accusingly at %s.", "%s looks accusingly at you.", "%s looks accusingly at %s." },
590  { "You grin at %s.", "%s grins evilly at you.", "%s grins evilly at %s." },
591  { "You bow before %s.", "%s bows before you.", "%s bows before %s." },
592  { NULL, NULL, NULL },
593  { NULL, NULL, NULL },
594  { NULL, NULL, NULL },
595  { NULL, NULL, NULL },
596  { NULL, NULL, NULL },
597  { NULL, NULL, NULL },
598  { "You frown darkly at %s.", "%s frowns darkly at you.", "%s frowns darkly at %s." },
599  { NULL, NULL, NULL },
600  { "You glare icily at %s.", "%s glares icily at you, you feel cold to your bones.", "%s glares at %s." },
601  { NULL, NULL, NULL },
602  { NULL, NULL, NULL },
603  { "You lick %s.", "%s licks you.", "%s licks %s." },
604  { NULL, NULL, NULL },
605  { NULL, NULL, NULL },
606  { "You shrug at %s.", "%s shrugs at you.", "%s shrugs at %s." },
607  { "You slap %s.", "You are slapped by %s.", "%s slaps %s." },
608  { NULL, NULL, NULL },
609  { NULL, NULL, NULL },
610  { "You sneeze at %s and a film of snot shoots onto him.", "%s sneezes on you, you feel the snot cover you. EEEEEEW.", "%s sneezes on %s and a film of snot covers him." },
611  { NULL, NULL, NULL },
612  { "You sniff %s.", "%s sniffs you.", "%s sniffs %s" },
613  { NULL, NULL, NULL },
614  { "You spit on %s.", "%s spits in your face!", "%s spits in %s's face." },
615  { NULL, NULL, NULL },
616  { "You thank %s heartily.", "%s thanks you heartily.", "%s thanks %s heartily." },
617  { NULL, NULL, NULL },
618  { "You wave goodbye to %s.", "%s waves goodbye to you. Have a good journey.", "%s waves goodbye to %s." },
619  { "You whistle at %s.", "%s whistles at you.", "%s whistles at %s." },
620  { "You wink suggestively at %s.", "%s winks suggestively at you.", "%s winks at %s." },
621  { NULL, NULL, NULL },
622  { "You beg %s for mercy.", "%s begs you for mercy! Show no quarter!", "%s begs %s for mercy!" },
623  { "You slash your wrist and bleed all over %s", "%s slashes his wrist and bleeds all over you.", "%s slashes his wrist and bleeds all over %s." },
624  { "You cringe away from %s.", "%s cringes away from you.", "%s cringes away from %s in mortal terror." },
625  { NULL, NULL, NULL },
626 };
627 
647 static void basic_emote(object *op, const char *params, int emotion) {
648  char buf[MAX_BUF], buf2[MAX_BUF], buf3[MAX_BUF];
649  player *pl;
650 
651  if (*params == '\0') {
652  const char *self_reply;
653  if (emotion > EMOTE_FIRST && emotion < EMOTE_LAST && single_emotes[emotion - 1][0] != NULL) {
654  self_reply = single_emotes[emotion - 1][0];
655  snprintf(buf2, sizeof(buf2), single_emotes[emotion - 1][1], op->name);
656  } else {
657  self_reply = "You are a nut.";
658  snprintf(buf2, sizeof(buf2), "%s dances with glee.", op->name);
659  }
660 
662  MSG_TYPE_COMMUNICATION_EMOTE, self_reply);
665  return;
666  }
667 
669  if (pl == NULL) {
671  MSG_TYPE_COMMAND_ERROR, "%s is not around.", params);
672  return;
673  }
674 
675  if (pl->ob == op) {
676  /* Player doing self-emote. */
677  const char *self_reply;
678  if (emotion > EMOTE_FIRST && emotion < EMOTE_LAST && self_emotes[emotion - 1][0] != NULL) {
679  self_reply = self_emotes[emotion - 1][0];
680  snprintf(buf2, sizeof(buf2), self_emotes[emotion - 1][1], op->name);
681  } else {
682  self_reply = "My god! is that LEGAL?";
683  snprintf(buf2, sizeof(buf2), "You look away from %s.", op->name);
684  }
685 
687  MSG_TYPE_COMMUNICATION_EMOTE, self_reply);
690  return;
691  }
692 
693  if (emotion > EMOTE_FIRST && emotion < EMOTE_LAST && other_emotes[emotion - 1][0] != NULL) {
694  snprintf(buf, sizeof(buf), other_emotes[emotion - 1][0], pl->ob->name);
695  snprintf(buf2, sizeof(buf2), other_emotes[emotion - 1][1], op->name);
696  snprintf(buf3, sizeof(buf3), other_emotes[emotion - 1][2], op->name, pl->ob->name);
697  } else {
698  snprintf(buf, sizeof(buf), "You are still nuts.");
699  snprintf(buf2, sizeof(buf2), "You get the distinct feeling that %s is nuts.", op->name);
700  snprintf(buf3, sizeof(buf3), "%s is eyeing %s quizzically.", pl->ob->name, op->name);
701  }
702 
704  buf);
706  buf2);
708  buf3);
709 }
710 
711 /*
712  * everything from here on out are just wrapper calls to basic_emote
713  */
714 
722 void command_nod(object *op, const char *params) {
723  basic_emote(op, params, EMOTE_NOD);
724 }
725 
733 void command_dance(object *op, const char *params) {
734  basic_emote(op, params, EMOTE_DANCE);
735 }
736 
744 void command_kiss(object *op, const char *params) {
745  basic_emote(op, params, EMOTE_KISS);
746 }
747 
755 void command_bounce(object *op, const char *params) {
756  basic_emote(op, params, EMOTE_BOUNCE);
757 }
758 
766 void command_smile(object *op, const char *params) {
767  basic_emote(op, params, EMOTE_SMILE);
768 }
769 
777 void command_cackle(object *op, const char *params) {
778  basic_emote(op, params, EMOTE_CACKLE);
779 }
780 
788 void command_laugh(object *op, const char *params) {
789  basic_emote(op, params, EMOTE_LAUGH);
790 }
791 
799 void command_giggle(object *op, const char *params) {
800  basic_emote(op, params, EMOTE_GIGGLE);
801 }
802 
810 void command_shake(object *op, const char *params) {
811  basic_emote(op, params, EMOTE_SHAKE);
812 }
813 
821 void command_puke(object *op, const char *params) {
822  basic_emote(op, params, EMOTE_PUKE);
823 }
824 
832 void command_growl(object *op, const char *params) {
833  basic_emote(op, params, EMOTE_GROWL);
834 }
835 
843 void command_scream(object *op, const char *params) {
844  basic_emote(op, params, EMOTE_SCREAM);
845 }
846 
854 void command_sigh(object *op, const char *params) {
855  basic_emote(op, params, EMOTE_SIGH);
856 }
857 
865 void command_sulk(object *op, const char *params) {
866  basic_emote(op, params, EMOTE_SULK);
867 }
868 
876 void command_hug(object *op, const char *params) {
877  basic_emote(op, params, EMOTE_HUG);
878 }
879 
887 void command_cry(object *op, const char *params) {
888  basic_emote(op, params, EMOTE_CRY);
889 }
890 
898 void command_poke(object *op, const char *params) {
899  basic_emote(op, params, EMOTE_POKE);
900 }
901 
909 void command_accuse(object *op, const char *params) {
910  basic_emote(op, params, EMOTE_ACCUSE);
911 }
912 
920 void command_grin(object *op, const char *params) {
921  basic_emote(op, params, EMOTE_GRIN);
922 }
923 
931 void command_bow(object *op, const char *params) {
932  basic_emote(op, params, EMOTE_BOW);
933 }
934 
942 void command_clap(object *op, const char *params) {
943  basic_emote(op, params, EMOTE_CLAP);
944 }
945 
953 void command_blush(object *op, const char *params) {
954  basic_emote(op, params, EMOTE_BLUSH);
955 }
956 
964 void command_burp(object *op, const char *params) {
965  basic_emote(op, params, EMOTE_BURP);
966 }
967 
975 void command_chuckle(object *op, const char *params) {
976  basic_emote(op, params, EMOTE_CHUCKLE);
977 }
978 
986 void command_cough(object *op, const char *params) {
987  basic_emote(op, params, EMOTE_COUGH);
988 }
989 
997 void command_flip(object *op, const char *params) {
998  basic_emote(op, params, EMOTE_FLIP);
999 }
1000 
1008 void command_frown(object *op, const char *params) {
1009  basic_emote(op, params, EMOTE_FROWN);
1010 }
1011 
1019 void command_gasp(object *op, const char *params) {
1020  basic_emote(op, params, EMOTE_GASP);
1021 }
1022 
1030 void command_glare(object *op, const char *params) {
1031  basic_emote(op, params, EMOTE_GLARE);
1032 }
1033 
1041 void command_groan(object *op, const char *params) {
1042  basic_emote(op, params, EMOTE_GROAN);
1043 }
1044 
1052 void command_hiccup(object *op, const char *params) {
1053  basic_emote(op, params, EMOTE_HICCUP);
1054 }
1055 
1063 void command_lick(object *op, const char *params) {
1064  basic_emote(op, params, EMOTE_LICK);
1065 }
1066 
1074 void command_pout(object *op, const char *params) {
1075  basic_emote(op, params, EMOTE_POUT);
1076 }
1077 
1085 void command_shiver(object *op, const char *params) {
1086  basic_emote(op, params, EMOTE_SHIVER);
1087 }
1088 
1096 void command_shrug(object *op, const char *params) {
1097  basic_emote(op, params, EMOTE_SHRUG);
1098 }
1099 
1107 void command_slap(object *op, const char *params) {
1108  basic_emote(op, params, EMOTE_SLAP);
1109 }
1110 
1118 void command_smirk(object *op, const char *params) {
1119  basic_emote(op, params, EMOTE_SMIRK);
1120 }
1121 
1129 void command_snap(object *op, const char *params) {
1130  basic_emote(op, params, EMOTE_SNAP);
1131 }
1132 
1140 void command_sneeze(object *op, const char *params) {
1141  basic_emote(op, params, EMOTE_SNEEZE);
1142 }
1143 
1151 void command_snicker(object *op, const char *params) {
1152  basic_emote(op, params, EMOTE_SNICKER);
1153 }
1154 
1162 void command_sniff(object *op, const char *params) {
1163  basic_emote(op, params, EMOTE_SNIFF);
1164 }
1165 
1173 void command_snore(object *op, const char *params) {
1174  basic_emote(op, params, EMOTE_SNORE);
1175 }
1176 
1184 void command_spit(object *op, const char *params) {
1185  basic_emote(op, params, EMOTE_SPIT);
1186 }
1187 
1195 void command_strut(object *op, const char *params) {
1196  basic_emote(op, params, EMOTE_STRUT);
1197 }
1198 
1206 void command_thank(object *op, const char *params) {
1207  basic_emote(op, params, EMOTE_THANK);
1208 }
1209 
1217 void command_twiddle(object *op, const char *params) {
1218  basic_emote(op, params, EMOTE_TWIDDLE);
1219 }
1220 
1228 void command_wave(object *op, const char *params) {
1229  basic_emote(op, params, EMOTE_WAVE);
1230 }
1231 
1239 void command_whistle(object *op, const char *params) {
1240  basic_emote(op, params, EMOTE_WHISTLE);
1241 }
1242 
1250 void command_wink(object *op, const char *params) {
1251  basic_emote(op, params, EMOTE_WINK);
1252 }
1253 
1261 void command_yawn(object *op, const char *params) {
1262  basic_emote(op, params, EMOTE_YAWN);
1263 }
1264 
1272 void command_beg(object *op, const char *params) {
1273  basic_emote(op, params, EMOTE_BEG);
1274 }
1275 
1283 void command_bleed(object *op, const char *params) {
1284  basic_emote(op, params, EMOTE_BLEED);
1285 }
1286 
1294 void command_cringe(object *op, const char *params) {
1295  basic_emote(op, params, EMOTE_CRINGE);
1296 }
1297 
1305 void command_think(object *op, const char *params) {
1306  basic_emote(op, params, EMOTE_THINK);
1307 }
command_cackle
void command_cackle(object *op, const char *params)
'cackle' command.
Definition: c_chat.cpp:777
command_flip
void command_flip(object *op, const char *params)
'flip' command.
Definition: c_chat.cpp:997
command_snicker
void command_snicker(object *op, const char *params)
'snicker' command.
Definition: c_chat.cpp:1151
global.h
command_burp
void command_burp(object *op, const char *params)
'burp' command.
Definition: c_chat.cpp:964
command_whistle
void command_whistle(object *op, const char *params)
'whistle' command.
Definition: c_chat.cpp:1239
safe_strncpy
#define safe_strncpy
Definition: compat.h:27
EMOTE_CHUCKLE
#define EMOTE_CHUCKLE
Definition: c_chat.cpp:405
command_wink
void command_wink(object *op, const char *params)
'wink' command.
Definition: c_chat.cpp:1250
command_slap
void command_slap(object *op, const char *params)
'slap' command.
Definition: c_chat.cpp:1107
EMOTE_CLAP
#define EMOTE_CLAP
Definition: c_chat.cpp:402
do_tell
static void do_tell(object *op, const char *params, int adjust_listen)
Actual function sending a private message.
Definition: c_chat.cpp:235
command_thank
void command_thank(object *op, const char *params)
'thank' command.
Definition: c_chat.cpp:1206
EMOTE_BLEED
#define EMOTE_BLEED
Definition: c_chat.cpp:433
command_nod
void command_nod(object *op, const char *params)
'nod' command.
Definition: c_chat.cpp:722
command_laugh
void command_laugh(object *op, const char *params)
'laugh' command.
Definition: c_chat.cpp:788
EMOTE_GROWL
#define EMOTE_GROWL
Definition: c_chat.cpp:392
command_shout
void command_shout(object *op, const char *params)
'shout' command.
Definition: c_chat.cpp:210
command_tell_all
static void command_tell_all(object *op, const char *params, int pri, int color, int subtype, const char *desc)
Utility function for chat or shout.
Definition: c_chat.cpp:183
command_hiccup
void command_hiccup(object *op, const char *params)
'hiccup' command.
Definition: c_chat.cpp:1052
player
One player.
Definition: player.h:105
EMOTE_CRY
#define EMOTE_CRY
Definition: c_chat.cpp:397
EMOTE_STRUT
#define EMOTE_STRUT
Definition: c_chat.cpp:425
QUERY_FLAG
#define QUERY_FLAG(xyz, p)
Definition: define.h:226
basic_emote
static void basic_emote(object *op, const char *params, int emotion)
This function covers basic emotions a player can have.
Definition: c_chat.cpp:647
EMOTE_NOD
#define EMOTE_NOD
Definition: c_chat.cpp:382
command_cry
void command_cry(object *op, const char *params)
'cry' command.
Definition: c_chat.cpp:887
EMOTE_SLAP
#define EMOTE_SLAP
Definition: c_chat.cpp:417
EMOTE_SNAP
#define EMOTE_SNAP
Definition: c_chat.cpp:419
EMOTE_SNEEZE
#define EMOTE_SNEEZE
Definition: c_chat.cpp:420
player::no_shout
uint32_t no_shout
if True, player is *not *able to use shout command.
Definition: player.h:148
command_giggle
void command_giggle(object *op, const char *params)
'giggle' command.
Definition: c_chat.cpp:799
command_sigh
void command_sigh(object *op, const char *params)
'sigh' command.
Definition: c_chat.cpp:854
EMOTE_ACCUSE
#define EMOTE_ACCUSE
Definition: c_chat.cpp:399
player::ob
object * ob
The object representing the player.
Definition: player.h:177
EMOTE_BOUNCE
#define EMOTE_BOUNCE
Definition: c_chat.cpp:385
command_snap
void command_snap(object *op, const char *params)
'snap' command.
Definition: c_chat.cpp:1129
EMOTE_LICK
#define EMOTE_LICK
Definition: c_chat.cpp:413
object::map
struct mapstruct * map
Pointer to the map in which this object is present.
Definition: object.h:305
EMOTE_SHIVER
#define EMOTE_SHIVER
Definition: c_chat.cpp:415
EMOTE_HICCUP
#define EMOTE_HICCUP
Definition: c_chat.cpp:412
command_dance
void command_dance(object *op, const char *params)
'dance' command.
Definition: c_chat.cpp:733
command_dmtell
void command_dmtell(object *op, const char *params)
Private communication, by a DM (can't be ignored by player).
Definition: c_chat.cpp:320
MSG_TYPE_COMMUNICATION_RANDOM
#define MSG_TYPE_COMMUNICATION_RANDOM
Random event (coin toss)
Definition: newclient.h:625
command_shake
void command_shake(object *op, const char *params)
'shake' command.
Definition: c_chat.cpp:810
command_hug
void command_hug(object *op, const char *params)
'hug' command.
Definition: c_chat.cpp:876
draw_ext_info_format
void draw_ext_info_format(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *format,...) PRINTF_ARGS(6
command_gasp
void command_gasp(object *op, const char *params)
'gasp' command.
Definition: c_chat.cpp:1019
single_emotes
static const char * single_emotes[EMOTE_LAST - 1][2]
Emote texts when the player does not specify who to apply the emote.
Definition: c_chat.cpp:445
command_chat
void command_chat(object *op, const char *params)
'chat' command.
Definition: c_chat.cpp:221
command_frown
void command_frown(object *op, const char *params)
'frown' command.
Definition: c_chat.cpp:1008
command_sneeze
void command_sneeze(object *op, const char *params)
'sneeze' command.
Definition: c_chat.cpp:1140
EMOTE_SPIT
#define EMOTE_SPIT
Definition: c_chat.cpp:424
EMOTE_SNIFF
#define EMOTE_SNIFF
Definition: c_chat.cpp:422
MSG_TYPE_COMMUNICATION_ME
#define MSG_TYPE_COMMUNICATION_ME
Player me's a message.
Definition: newclient.h:627
NDI_RED
#define NDI_RED
Definition: newclient.h:248
EMOTE_GLARE
#define EMOTE_GLARE
Definition: c_chat.cpp:410
player::hidden
uint32_t hidden
If True, player (DM) is hidden from view.
Definition: player.h:147
EMOTE_GRIN
#define EMOTE_GRIN
Definition: c_chat.cpp:400
command_cringe
void command_cringe(object *op, const char *params)
'cringe' command.
Definition: c_chat.cpp:1294
rndm
int rndm(int min, int max)
Returns a number between min and max.
Definition: utils.cpp:162
command_chuckle
void command_chuckle(object *op, const char *params)
'chuckle' command.
Definition: c_chat.cpp:975
MSG_TYPE_COMMAND_ERROR
#define MSG_TYPE_COMMAND_ERROR
Bad syntax/can't use command.
Definition: newclient.h:532
NDI_BLUE
#define NDI_BLUE
Actually, it is Dodger Blue.
Definition: newclient.h:250
buf
StringBuffer * buf
Definition: readable.cpp:1565
MSG_TYPE_COMMAND
#define MSG_TYPE_COMMAND
Responses to commands, eg, who.
Definition: newclient.h:407
EMOTE_WAVE
#define EMOTE_WAVE
Definition: c_chat.cpp:428
MSG_TYPE_COMMUNICATION_CHAT
#define MSG_TYPE_COMMUNICATION_CHAT
Party message.
Definition: newclient.h:632
EMOTE_GIGGLE
#define EMOTE_GIGGLE
Definition: c_chat.cpp:389
name
Plugin animator file specs[Config] name
Definition: animfiles.txt:4
NDI_ORANGE
#define NDI_ORANGE
Definition: newclient.h:249
draw_ext_info
vs only yadda is in because all tags get reset on the next draw_ext_info In the second since it is all in one draw_ext_info
Definition: media-tags.txt:61
EMOTE_FLIP
#define EMOTE_FLIP
Definition: c_chat.cpp:407
command_glare
void command_glare(object *op, const char *params)
'glare' command.
Definition: c_chat.cpp:1030
EMOTE_SHRUG
#define EMOTE_SHRUG
Definition: c_chat.cpp:416
object::contr
struct player * contr
Pointer to the player which control this object.
Definition: object.h:284
EMOTE_BOW
#define EMOTE_BOW
Definition: c_chat.cpp:401
command_bleed
void command_bleed(object *op, const char *params)
'bleed' command.
Definition: c_chat.cpp:1283
object_decrease_nrof_by_one
#define object_decrease_nrof_by_one(xyz)
Definition: compat.h:32
command_spit
void command_spit(object *op, const char *params)
'spit' command.
Definition: c_chat.cpp:1184
DICE
#define DICE
How many dice to roll for orcknuckle.
Definition: c_chat.cpp:91
EMOTE_SNORE
#define EMOTE_SNORE
Definition: c_chat.cpp:423
command_shiver
void command_shiver(object *op, const char *params)
'shiver' command.
Definition: c_chat.cpp:1085
EMOTE_KISS
#define EMOTE_KISS
Definition: c_chat.cpp:384
command_snore
void command_snore(object *op, const char *params)
'snore' command.
Definition: c_chat.cpp:1173
EMOTE_SCREAM
#define EMOTE_SCREAM
Definition: c_chat.cpp:393
EMOTE_POUT
#define EMOTE_POUT
Definition: c_chat.cpp:414
ext_info_map_except2
void ext_info_map_except2(int color, const mapstruct *map, const object *op1, const object *op2, int type, int subtype, const char *str1)
Writes to everyone on the map except op1 and op2.
Definition: info.cpp:245
command_growl
void command_growl(object *op, const char *params)
'growl' command.
Definition: c_chat.cpp:832
other_emotes
static const char * other_emotes[EMOTE_LAST - 1][3]
Emote texts when the player applies the emote to someone else.
Definition: c_chat.cpp:571
EMOTE_GASP
#define EMOTE_GASP
Definition: c_chat.cpp:409
EMOTE_BLUSH
#define EMOTE_BLUSH
Definition: c_chat.cpp:403
ext_info_map
void void ext_info_map(int color, const mapstruct *map, uint8_t type, uint8_t subtype, const char *str1)
Writes to everyone on the specified map.
Definition: main.cpp:334
find_string
sstring find_string(const char *str)
Searches a string in the shared strings.
Definition: shstr.cpp:236
command_pout
void command_pout(object *op, const char *params)
'pout' command.
Definition: c_chat.cpp:1074
EMOTE_BURP
#define EMOTE_BURP
Definition: c_chat.cpp:404
command_accuse
void command_accuse(object *op, const char *params)
'accuse' command.
Definition: c_chat.cpp:909
EMOTE_DANCE
#define EMOTE_DANCE
Definition: c_chat.cpp:383
EMOTE_SMILE
#define EMOTE_SMILE
Definition: c_chat.cpp:386
command_clap
void command_clap(object *op, const char *params)
'clap' command.
Definition: c_chat.cpp:942
FOR_INV_FINISH
#define FOR_INV_FINISH()
Finishes FOR_INV_PREPARE().
Definition: define.h:671
MAX_NAME
#define MAX_NAME
Definition: define.h:41
command_wave
void command_wave(object *op, const char *params)
'wave' command.
Definition: c_chat.cpp:1228
EMOTE_BEG
#define EMOTE_BEG
Definition: c_chat.cpp:432
monster_communicate
void monster_communicate(object *op, const char *txt)
This function looks for an object or creature that is listening to said text.
Definition: monster.cpp:2374
EMOTE_WHISTLE
#define EMOTE_WHISTLE
Definition: c_chat.cpp:429
orcknuckle
static const char *const orcknuckle[7]
Results for the "orcknucle" game.
Definition: c_chat.cpp:81
sproto.h
FIND_PLAYER_PARTIAL_NAME
#define FIND_PLAYER_PARTIAL_NAME
Find on partial name.
Definition: player.h:237
MSG_TYPE_COMMUNICATION_TELL
#define MSG_TYPE_COMMUNICATION_TELL
Player tells something.
Definition: newclient.h:628
EMOTE_SULK
#define EMOTE_SULK
Definition: c_chat.cpp:395
EMOTE_FIRST
#define EMOTE_FIRST
Definition: c_chat.cpp:381
EVENT_SHOUT
#define EVENT_SHOUT
A player 'shout' something.
Definition: events.h:55
command_puke
void command_puke(object *op, const char *params)
'puke' command.
Definition: c_chat.cpp:821
EMOTE_CACKLE
#define EMOTE_CACKLE
Definition: c_chat.cpp:387
EMOTE_SMIRK
#define EMOTE_SMIRK
Definition: c_chat.cpp:418
MAX_BUF
#define MAX_BUF
Used for all kinds of things.
Definition: define.h:35
EMOTE_WINK
#define EMOTE_WINK
Definition: c_chat.cpp:430
player::listening
uint8_t listening
Which priority will be used in info_all.
Definition: player.h:133
strlcpy
size_t strlcpy(char *dst, const char *src, size_t size)
Portable implementation of strlcpy(3).
Definition: porting.cpp:222
FIND_PLAYER_NO_HIDDEN_DM
#define FIND_PLAYER_NO_HIDDEN_DM
Don't find hidden DMs.
Definition: player.h:238
command_smile
void command_smile(object *op, const char *params)
'smile' command.
Definition: c_chat.cpp:766
FLAG_WIZ
#define FLAG_WIZ
Object has special privilegies.
Definition: define.h:231
ext_info_map_except
void ext_info_map_except(int color, const mapstruct *map, const object *op, uint8_t type, uint8_t subtype, const char *str1)
Writes to everyone on the map except *op.
Definition: info.cpp:219
MSG_TYPE_COMMUNICATION_SHOUT
#define MSG_TYPE_COMMUNICATION_SHOUT
Party message.
Definition: newclient.h:631
NDI_UNIQUE
#define NDI_UNIQUE
Print immediately, don't buffer.
Definition: newclient.h:265
EVENT_TELL
#define EVENT_TELL
A player 'tell' something.
Definition: events.h:56
object::name
sstring name
The name of the object, obviously...
Definition: object.h:319
command_groan
void command_groan(object *op, const char *params)
'groan' command.
Definition: c_chat.cpp:1041
command_kiss
void command_kiss(object *op, const char *params)
'kiss' command.
Definition: c_chat.cpp:744
command_beg
void command_beg(object *op, const char *params)
'beg' command.
Definition: c_chat.cpp:1272
command_smirk
void command_smirk(object *op, const char *params)
'smirk' command.
Definition: c_chat.cpp:1118
EMOTE_PUKE
#define EMOTE_PUKE
Definition: c_chat.cpp:391
command_sulk
void command_sulk(object *op, const char *params)
'sulk' command.
Definition: c_chat.cpp:865
NDI_ALL
#define NDI_ALL
Inform all players of this message.
Definition: newclient.h:266
EMOTE_SHAKE
#define EMOTE_SHAKE
Definition: c_chat.cpp:390
self_emotes
static const char * self_emotes[EMOTE_LAST - 1][2]
Emote texts when the player applies the emote to herself.
Definition: c_chat.cpp:507
EMOTE_THINK
#define EMOTE_THINK
Definition: c_chat.cpp:435
command_tell
void command_tell(object *op, const char *params)
Private communication.
Definition: c_chat.cpp:308
command_cough
void command_cough(object *op, const char *params)
'cough' command.
Definition: c_chat.cpp:986
command_think
void command_think(object *op, const char *params)
'think' command.
Definition: c_chat.cpp:1305
command_grin
void command_grin(object *op, const char *params)
'grin' command.
Definition: c_chat.cpp:920
EMOTE_TWIDDLE
#define EMOTE_TWIDDLE
Definition: c_chat.cpp:427
NDI_WHITE
#define NDI_WHITE
Definition: newclient.h:246
EMOTE_FROWN
#define EMOTE_FROWN
Definition: c_chat.cpp:408
find_player_partial_name
player * find_player_partial_name(const char *plname)
Find a player by a partial name.
Definition: player.cpp:114
die_roll
int die_roll(int num, int size, const object *op, int goodbad)
Roll a number of dice (2d3, 4d6).
Definition: utils.cpp:122
command_me
void command_me(object *op, const char *params)
'me' command.
Definition: c_chat.cpp:47
command_strut
void command_strut(object *op, const char *params)
'strut' command.
Definition: c_chat.cpp:1195
command_cointoss
void command_cointoss(object *op, const char *params)
'cointoss' command.
Definition: c_chat.cpp:64
command_lick
void command_lick(object *op, const char *params)
'lick' command.
Definition: c_chat.cpp:1063
command_sniff
void command_sniff(object *op, const char *params)
'sniff' command.
Definition: c_chat.cpp:1162
EMOTE_THANK
#define EMOTE_THANK
Definition: c_chat.cpp:426
EMOTE_SNICKER
#define EMOTE_SNICKER
Definition: c_chat.cpp:421
find_player_options
player * find_player_options(const char *plname, int options, const mapstruct *map)
Find a player.
Definition: player.cpp:70
command_blush
void command_blush(object *op, const char *params)
'blush' command.
Definition: c_chat.cpp:953
command_twiddle
void command_twiddle(object *op, const char *params)
'twiddle' command.
Definition: c_chat.cpp:1217
loader.h
EMOTE_COUGH
#define EMOTE_COUGH
Definition: c_chat.cpp:406
player::last_tell
char last_tell[MAX_NAME]
last player that told you something [mids 01/14/2002].
Definition: player.h:191
EMOTE_CRINGE
#define EMOTE_CRINGE
Definition: c_chat.cpp:434
command_bow
void command_bow(object *op, const char *params)
'bow' command.
Definition: c_chat.cpp:931
EMOTE_HUG
#define EMOTE_HUG
Definition: c_chat.cpp:396
EMOTE_LAUGH
#define EMOTE_LAUGH
Definition: c_chat.cpp:388
EMOTE_LAST
#define EMOTE_LAST
Definition: c_chat.cpp:436
MSG_TYPE_COMMUNICATION_EMOTE
#define MSG_TYPE_COMMUNICATION_EMOTE
Player emotes.
Definition: newclient.h:629
MSG_TYPE_COMMUNICATION
#define MSG_TYPE_COMMUNICATION
Communication between players.
Definition: newclient.h:413
command_say
void command_say(object *op, const char *params)
'say' command.
Definition: c_chat.cpp:34
EMOTE_YAWN
#define EMOTE_YAWN
Definition: c_chat.cpp:431
EMOTE_GROAN
#define EMOTE_GROAN
Definition: c_chat.cpp:411
EMOTE_SIGH
#define EMOTE_SIGH
Definition: c_chat.cpp:394
command_yawn
void command_yawn(object *op, const char *params)
'yawn' command.
Definition: c_chat.cpp:1261
EMOTE_POKE
#define EMOTE_POKE
Definition: c_chat.cpp:398
command_shrug
void command_shrug(object *op, const char *params)
'shrug' command.
Definition: c_chat.cpp:1096
FOR_INV_PREPARE
#define FOR_INV_PREPARE(op_, it_)
Constructs a loop iterating over the inventory of an object.
Definition: define.h:664
events_execute_global_event
void events_execute_global_event(int eventcode,...)
Execute a global event.
Definition: events.cpp:30
command_scream
void command_scream(object *op, const char *params)
'scream' command.
Definition: c_chat.cpp:843
command_bounce
void command_bounce(object *op, const char *params)
'bounce' command.
Definition: c_chat.cpp:755
command_poke
void command_poke(object *op, const char *params)
'poke' command.
Definition: c_chat.cpp:898
find_player
player * find_player(const char *plname)
Find a player by her full name.
Definition: player.cpp:59
command_reply
void command_reply(object *op, const char *params)
Reply to last person who told you something [mids 01/14/2002].
Definition: c_chat.cpp:336