Crossfire Server, Trunk
c_chat.c
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;
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 
201 }
202 
210 void command_shout(object *op, const char *params) {
212 }
213 
221 void command_chat(object *op, const char *params) {
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) {
724 }
725 
733 void command_dance(object *op, const char *params) {
735 }
736 
744 void command_kiss(object *op, const char *params) {
746 }
747 
755 void command_bounce(object *op, const char *params) {
757 }
758 
766 void command_smile(object *op, const char *params) {
768 }
769 
777 void command_cackle(object *op, const char *params) {
779 }
780 
788 void command_laugh(object *op, const char *params) {
790 }
791 
799 void command_giggle(object *op, const char *params) {
801 }
802 
810 void command_shake(object *op, const char *params) {
812 }
813 
821 void command_puke(object *op, const char *params) {
823 }
824 
832 void command_growl(object *op, const char *params) {
834 }
835 
843 void command_scream(object *op, const char *params) {
845 }
846 
854 void command_sigh(object *op, const char *params) {
856 }
857 
865 void command_sulk(object *op, const char *params) {
867 }
868 
876 void command_hug(object *op, const char *params) {
878 }
879 
887 void command_cry(object *op, const char *params) {
889 }
890 
898 void command_poke(object *op, const char *params) {
900 }
901 
909 void command_accuse(object *op, const char *params) {
911 }
912 
920 void command_grin(object *op, const char *params) {
922 }
923 
931 void command_bow(object *op, const char *params) {
933 }
934 
942 void command_clap(object *op, const char *params) {
944 }
945 
953 void command_blush(object *op, const char *params) {
955 }
956 
964 void command_burp(object *op, const char *params) {
966 }
967 
975 void command_chuckle(object *op, const char *params) {
977 }
978 
986 void command_cough(object *op, const char *params) {
988 }
989 
997 void command_flip(object *op, const char *params) {
999 }
1000 
1008 void command_frown(object *op, const char *params) {
1010 }
1011 
1019 void command_gasp(object *op, const char *params) {
1021 }
1022 
1030 void command_glare(object *op, const char *params) {
1032 }
1033 
1041 void command_groan(object *op, const char *params) {
1043 }
1044 
1052 void command_hiccup(object *op, const char *params) {
1054 }
1055 
1063 void command_lick(object *op, const char *params) {
1065 }
1066 
1074 void command_pout(object *op, const char *params) {
1076 }
1077 
1085 void command_shiver(object *op, const char *params) {
1087 }
1088 
1096 void command_shrug(object *op, const char *params) {
1098 }
1099 
1107 void command_slap(object *op, const char *params) {
1109 }
1110 
1118 void command_smirk(object *op, const char *params) {
1120 }
1121 
1129 void command_snap(object *op, const char *params) {
1131 }
1132 
1140 void command_sneeze(object *op, const char *params) {
1142 }
1143 
1151 void command_snicker(object *op, const char *params) {
1153 }
1154 
1162 void command_sniff(object *op, const char *params) {
1164 }
1165 
1173 void command_snore(object *op, const char *params) {
1175 }
1176 
1184 void command_spit(object *op, const char *params) {
1186 }
1187 
1195 void command_strut(object *op, const char *params) {
1197 }
1198 
1206 void command_thank(object *op, const char *params) {
1208 }
1209 
1217 void command_twiddle(object *op, const char *params) {
1219 }
1220 
1228 void command_wave(object *op, const char *params) {
1230 }
1231 
1239 void command_whistle(object *op, const char *params) {
1241 }
1242 
1250 void command_wink(object *op, const char *params) {
1252 }
1253 
1261 void command_yawn(object *op, const char *params) {
1263 }
1264 
1272 void command_beg(object *op, const char *params) {
1274 }
1275 
1283 void command_bleed(object *op, const char *params) {
1285 }
1286 
1294 void command_cringe(object *op, const char *params) {
1296 }
1297 
1305 void command_think(object *op, const char *params) {
1307 }
command_dmtell
void command_dmtell(object *op, const char *params)
Definition: c_chat.c:320
command_sulk
void command_sulk(object *op, const char *params)
Definition: c_chat.c:865
EMOTE_SNICKER
#define EMOTE_SNICKER
Definition: c_chat.c:421
global.h
banquet.l
l
Definition: banquet.py:164
safe_strncpy
#define safe_strncpy
Definition: compat.h:27
EMOTE_WAVE
#define EMOTE_WAVE
Definition: c_chat.c:428
EMOTE_SPIT
#define EMOTE_SPIT
Definition: c_chat.c:424
EMOTE_BOUNCE
#define EMOTE_BOUNCE
Definition: c_chat.c:385
EMOTE_KISS
#define EMOTE_KISS
Definition: c_chat.c:384
EMOTE_SHRUG
#define EMOTE_SHRUG
Definition: c_chat.c:416
command_snore
void command_snore(object *op, const char *params)
Definition: c_chat.c:1173
command_dance
void command_dance(object *op, const char *params)
Definition: c_chat.c:733
QUERY_FLAG
#define QUERY_FLAG(xyz, p)
Definition: define.h:226
command_shout
void command_shout(object *op, const char *params)
Definition: c_chat.c:210
command_chat
void command_chat(object *op, const char *params)
Definition: c_chat.c:221
command_glare
void command_glare(object *op, const char *params)
Definition: c_chat.c:1030
EMOTE_SNAP
#define EMOTE_SNAP
Definition: c_chat.c:419
EMOTE_TWIDDLE
#define EMOTE_TWIDDLE
Definition: c_chat.c:427
EMOTE_CRINGE
#define EMOTE_CRINGE
Definition: c_chat.c:434
command_burp
void command_burp(object *op, const char *params)
Definition: c_chat.c:964
EMOTE_GASP
#define EMOTE_GASP
Definition: c_chat.c:409
pl
Definition: player.h:105
basic_emote
static void basic_emote(object *op, const char *params, int emotion)
Definition: c_chat.c:647
command_whistle
void command_whistle(object *op, const char *params)
Definition: c_chat.c:1239
EMOTE_LAST
#define EMOTE_LAST
Definition: c_chat.c:436
guildjoin.ob
ob
Definition: guildjoin.py:42
command_groan
void command_groan(object *op, const char *params)
Definition: c_chat.c:1041
MSG_TYPE_COMMUNICATION_RANDOM
#define MSG_TYPE_COMMUNICATION_RANDOM
Definition: newclient.h:622
EMOTE_CRY
#define EMOTE_CRY
Definition: c_chat.c:397
pl::ob
object * ob
Definition: player.h:176
orcknuckle
static const char *const orcknuckle[7]
Definition: c_chat.c:81
MSG_TYPE_COMMUNICATION_ME
#define MSG_TYPE_COMMUNICATION_ME
Definition: newclient.h:624
NDI_RED
#define NDI_RED
Definition: newclient.h:245
command_bow
void command_bow(object *op, const char *params)
Definition: c_chat.c:931
EMOTE_FLIP
#define EMOTE_FLIP
Definition: c_chat.c:407
EMOTE_SHAKE
#define EMOTE_SHAKE
Definition: c_chat.c:390
EMOTE_FIRST
#define EMOTE_FIRST
Definition: c_chat.c:381
EMOTE_DANCE
#define EMOTE_DANCE
Definition: c_chat.c:383
ext_info_map
void ext_info_map(int color, const mapstruct *map, uint8_t type, uint8_t subtype, const char *str1)
Definition: main.c:335
EMOTE_THANK
#define EMOTE_THANK
Definition: c_chat.c:426
MSG_TYPE_COMMAND_ERROR
#define MSG_TYPE_COMMAND_ERROR
Definition: newclient.h:529
smoking_pipe.color
color
Definition: smoking_pipe.py:5
command_scream
void command_scream(object *op, const char *params)
Definition: c_chat.c:843
EMOTE_BOW
#define EMOTE_BOW
Definition: c_chat.c:401
NDI_BLUE
#define NDI_BLUE
Definition: newclient.h:247
command_spit
void command_spit(object *op, const char *params)
Definition: c_chat.c:1184
command_snap
void command_snap(object *op, const char *params)
Definition: c_chat.c:1129
EMOTE_GROAN
#define EMOTE_GROAN
Definition: c_chat.c:411
EMOTE_SLAP
#define EMOTE_SLAP
Definition: c_chat.c:417
MSG_TYPE_COMMAND
#define MSG_TYPE_COMMAND
Definition: newclient.h:404
MSG_TYPE_COMMUNICATION_CHAT
#define MSG_TYPE_COMMUNICATION_CHAT
Definition: newclient.h:629
command_laugh
void command_laugh(object *op, const char *params)
Definition: c_chat.c:788
single_emotes
static const char * single_emotes[EMOTE_LAST - 1][2]
Definition: c_chat.c:445
command_cackle
void command_cackle(object *op, const char *params)
Definition: c_chat.c:777
NDI_ORANGE
#define NDI_ORANGE
Definition: newclient.h:246
command_snicker
void command_snicker(object *op, const char *params)
Definition: c_chat.c:1151
command_think
void command_think(object *op, const char *params)
Definition: c_chat.c:1305
command_wave
void command_wave(object *op, const char *params)
Definition: c_chat.c:1228
EMOTE_SCREAM
#define EMOTE_SCREAM
Definition: c_chat.c:393
command_lick
void command_lick(object *op, const char *params)
Definition: c_chat.c:1063
command_smirk
void command_smirk(object *op, const char *params)
Definition: c_chat.c:1118
command_pout
void command_pout(object *op, const char *params)
Definition: c_chat.c:1074
command_kiss
void command_kiss(object *op, const char *params)
Definition: c_chat.c:744
command_frown
void command_frown(object *op, const char *params)
Definition: c_chat.c:1008
command_poke
void command_poke(object *op, const char *params)
Definition: c_chat.c:898
command_growl
void command_growl(object *op, const char *params)
Definition: c_chat.c:832
command_tell_all
static void command_tell_all(object *op, const char *params, int pri, int color, int subtype, const char *desc)
Definition: c_chat.c:183
object_decrease_nrof_by_one
#define object_decrease_nrof_by_one(xyz)
Definition: compat.h:32
command_strut
void command_strut(object *op, const char *params)
Definition: c_chat.c:1195
obj::name
sstring name
Definition: object.h:314
rotate-tower.result
bool result
Definition: rotate-tower.py:13
command_cough
void command_cough(object *op, const char *params)
Definition: c_chat.c:986
EMOTE_SULK
#define EMOTE_SULK
Definition: c_chat.c:395
EMOTE_WINK
#define EMOTE_WINK
Definition: c_chat.c:430
command_gasp
void command_gasp(object *op, const char *params)
Definition: c_chat.c:1019
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)
Definition: info.c:245
command_hug
void command_hug(object *op, const char *params)
Definition: c_chat.c:876
EMOTE_YAWN
#define EMOTE_YAWN
Definition: c_chat.c:431
EMOTE_SMILE
#define EMOTE_SMILE
Definition: c_chat.c:386
find_string
sstring find_string(const char *str)
Definition: shstr.c:236
command_me
void command_me(object *op, const char *params)
Definition: c_chat.c:47
navar-midane_pickup.msg
list msg
Definition: navar-midane_pickup.py:13
EMOTE_COUGH
#define EMOTE_COUGH
Definition: c_chat.c:406
EMOTE_SNIFF
#define EMOTE_SNIFF
Definition: c_chat.c:422
command_reply
void command_reply(object *op, const char *params)
Definition: c_chat.c:336
FOR_INV_FINISH
#define FOR_INV_FINISH()
Definition: define.h:677
MAX_NAME
#define MAX_NAME
Definition: define.h:41
command_nod
void command_nod(object *op, const char *params)
Definition: c_chat.c:722
self_emotes
static const char * self_emotes[EMOTE_LAST - 1][2]
Definition: c_chat.c:507
EMOTE_POKE
#define EMOTE_POKE
Definition: c_chat.c:398
rndm
int rndm(int min, int max)
Definition: utils.c:162
monster_communicate
void monster_communicate(object *op, const char *txt)
Definition: monster.c:2366
EMOTE_NOD
#define EMOTE_NOD
Definition: c_chat.c:382
EMOTE_LAUGH
#define EMOTE_LAUGH
Definition: c_chat.c:388
sproto.h
EMOTE_BLEED
#define EMOTE_BLEED
Definition: c_chat.c:433
FIND_PLAYER_PARTIAL_NAME
#define FIND_PLAYER_PARTIAL_NAME
Definition: player.h:234
MSG_TYPE_COMMUNICATION_TELL
#define MSG_TYPE_COMMUNICATION_TELL
Definition: newclient.h:625
EMOTE_BLUSH
#define EMOTE_BLUSH
Definition: c_chat.c:403
EVENT_SHOUT
#define EVENT_SHOUT
Definition: events.h:54
nlohmann::detail::void
j template void())
Definition: json.hpp:4099
pl::last_tell
char last_tell[MAX_NAME]
Definition: player.h:190
EMOTE_SHIVER
#define EMOTE_SHIVER
Definition: c_chat.c:415
strlcpy
size_t strlcpy(char *dst, const char *src, size_t size)
Definition: porting.c:220
pl::listening
uint8_t listening
Definition: player.h:133
command_bounce
void command_bounce(object *op, const char *params)
Definition: c_chat.c:755
MAX_BUF
#define MAX_BUF
Definition: define.h:35
command_shake
void command_shake(object *op, const char *params)
Definition: c_chat.c:810
EMOTE_CLAP
#define EMOTE_CLAP
Definition: c_chat.c:402
FIND_PLAYER_NO_HIDDEN_DM
#define FIND_PLAYER_NO_HIDDEN_DM
Definition: player.h:235
command_wink
void command_wink(object *op, const char *params)
Definition: c_chat.c:1250
EMOTE_GRIN
#define EMOTE_GRIN
Definition: c_chat.c:400
do_tell
static void do_tell(object *op, const char *params, int adjust_listen)
Definition: c_chat.c:235
EMOTE_BEG
#define EMOTE_BEG
Definition: c_chat.c:432
FLAG_WIZ
#define FLAG_WIZ
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)
Definition: info.c:219
MSG_TYPE_COMMUNICATION_SHOUT
#define MSG_TYPE_COMMUNICATION_SHOUT
Definition: newclient.h:628
command_shrug
void command_shrug(object *op, const char *params)
Definition: c_chat.c:1096
NDI_UNIQUE
#define NDI_UNIQUE
Definition: newclient.h:262
EMOTE_HUG
#define EMOTE_HUG
Definition: c_chat.c:396
die_roll
int die_roll(int num, int size, const object *op, int goodbad)
Definition: utils.c:122
EVENT_TELL
#define EVENT_TELL
Definition: events.h:55
EMOTE_SNEEZE
#define EMOTE_SNEEZE
Definition: c_chat.c:420
command_flip
void command_flip(object *op, const char *params)
Definition: c_chat.c:997
other_emotes
static const char * other_emotes[EMOTE_LAST - 1][3]
Definition: c_chat.c:571
command_tell
void command_tell(object *op, const char *params)
Definition: c_chat.c:308
command_grin
void command_grin(object *op, const char *params)
Definition: c_chat.c:920
EMOTE_FROWN
#define EMOTE_FROWN
Definition: c_chat.c:408
EMOTE_SMIRK
#define EMOTE_SMIRK
Definition: c_chat.c:418
command_hiccup
void command_hiccup(object *op, const char *params)
Definition: c_chat.c:1052
command_chuckle
void command_chuckle(object *op, const char *params)
Definition: c_chat.c:975
command_slap
void command_slap(object *op, const char *params)
Definition: c_chat.c:1107
give.op
op
Definition: give.py:33
NDI_ALL
#define NDI_ALL
Definition: newclient.h:263
EMOTE_CHUCKLE
#define EMOTE_CHUCKLE
Definition: c_chat.c:405
command_bleed
void command_bleed(object *op, const char *params)
Definition: c_chat.c:1283
command_sneeze
void command_sneeze(object *op, const char *params)
Definition: c_chat.c:1140
roll-o-matic.params
params
Definition: roll-o-matic.py:193
NDI_WHITE
#define NDI_WHITE
Definition: newclient.h:243
command_twiddle
void command_twiddle(object *op, const char *params)
Definition: c_chat.c:1217
buf
StringBuffer * buf
Definition: readable.c:1610
pl::hidden
uint32_t hidden
Definition: player.h:147
EMOTE_GROWL
#define EMOTE_GROWL
Definition: c_chat.c:392
EMOTE_CACKLE
#define EMOTE_CACKLE
Definition: c_chat.c:387
command_cringe
void command_cringe(object *op, const char *params)
Definition: c_chat.c:1294
find_player_partial_name
player * find_player_partial_name(const char *plname)
Definition: player.c:111
EMOTE_PUKE
#define EMOTE_PUKE
Definition: c_chat.c:391
command_shiver
void command_shiver(object *op, const char *params)
Definition: c_chat.c:1085
EMOTE_BURP
#define EMOTE_BURP
Definition: c_chat.c:404
EMOTE_GLARE
#define EMOTE_GLARE
Definition: c_chat.c:410
find_player_options
player * find_player_options(const char *plname, int options, const mapstruct *map)
Definition: player.c:67
command_cry
void command_cry(object *op, const char *params)
Definition: c_chat.c:887
command_thank
void command_thank(object *op, const char *params)
Definition: c_chat.c:1206
loader.h
draw_ext_info
void draw_ext_info(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *message)
Definition: main.c:309
MSG_TYPE_COMMUNICATION_EMOTE
#define MSG_TYPE_COMMUNICATION_EMOTE
Definition: newclient.h:626
EMOTE_HICCUP
#define EMOTE_HICCUP
Definition: c_chat.c:412
command_cointoss
void command_cointoss(object *op, const char *params)
Definition: c_chat.c:64
EMOTE_THINK
#define EMOTE_THINK
Definition: c_chat.c:435
command_puke
void command_puke(object *op, const char *params)
Definition: c_chat.c:821
command_giggle
void command_giggle(object *op, const char *params)
Definition: c_chat.c:799
EMOTE_STRUT
#define EMOTE_STRUT
Definition: c_chat.c:425
command_sigh
void command_sigh(object *op, const char *params)
Definition: c_chat.c:854
MSG_TYPE_COMMUNICATION
#define MSG_TYPE_COMMUNICATION
Definition: newclient.h:410
command_beg
void command_beg(object *op, const char *params)
Definition: c_chat.c:1272
EMOTE_GIGGLE
#define EMOTE_GIGGLE
Definition: c_chat.c:389
command_smile
void command_smile(object *op, const char *params)
Definition: c_chat.c:766
command_clap
void command_clap(object *op, const char *params)
Definition: c_chat.c:942
EMOTE_ACCUSE
#define EMOTE_ACCUSE
Definition: c_chat.c:399
command_yawn
void command_yawn(object *op, const char *params)
Definition: c_chat.c:1261
EMOTE_LICK
#define EMOTE_LICK
Definition: c_chat.c:413
altar_valkyrie.pl
pl
Definition: altar_valkyrie.py:28
command_sniff
void command_sniff(object *op, const char *params)
Definition: c_chat.c:1162
DICE
#define DICE
Definition: c_chat.c:91
command_accuse
void command_accuse(object *op, const char *params)
Definition: c_chat.c:909
command_say
void command_say(object *op, const char *params)
Definition: c_chat.c:34
EMOTE_POUT
#define EMOTE_POUT
Definition: c_chat.c:414
FOR_INV_PREPARE
#define FOR_INV_PREPARE(op_, it_)
Definition: define.h:670
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,...)
Definition: main.c:319
events_execute_global_event
void events_execute_global_event(int eventcode,...)
Definition: events.cpp:29
EMOTE_SNORE
#define EMOTE_SNORE
Definition: c_chat.c:423
command_blush
void command_blush(object *op, const char *params)
Definition: c_chat.c:953
EMOTE_SIGH
#define EMOTE_SIGH
Definition: c_chat.c:394
EMOTE_WHISTLE
#define EMOTE_WHISTLE
Definition: c_chat.c:429
give.name
name
Definition: give.py:27
find_player
player * find_player(const char *plname)
Definition: player.c:56