blob: 4f24f5202fca5dabda6fe8511fc7920f0f014172 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// inpc/boozing.c -- Intelligentes Saufen
4//
5// $Id: boozing.c 8396 2013-02-18 21:56:37Z Zesstra $
6#pragma strong_types
7#pragma save_types
8#pragma range_check
9#pragma no_clone
10#pragma pedantic
11
12#define NEED_PROTOTYPES
13#include <thing.h>
14#include <living.h>
15#include <inpc.h>
16#include <container/moneyhandler.h>
17#include <properties.h>
18
19#define DRINK_IDS 1
20#define DRINK_COST 2
21#define DRINK_HEAL 3
22#define DRINK_ALC 4
23#define DRINK_SAT 5
24
25int Drink() {
26 mixed drinks;
27 object env;
28 int i,max,mon,hdiff;
29
30 if ((mon=QueryMoney())<=0
31 || !(env=environment())
32 || !pointerp(drinks=env->query_drink())
33 || (hdiff=QueryProp(P_MAX_HP)-QueryProp(P_HP))<=0)
34 return 0;
35 max=-1;
36 for (i=sizeof(drinks)-1;i>=0;i--) {
37 if (drinks[i][DRINK_COST]>mon
38 || ((drinks[i][DRINK_ALC]>0) &&
39 ((drinks[i][DRINK_ALC]+QueryProp(P_ALCOHOL))
40 > (100-QueryProp(P_I_HATE_ALCOHOL))))
41 || drinks[i][DRINK_SAT]+QueryProp(P_DRINK)>100
42 || drinks[i][DRINK_HEAL]<=0)
43 continue;
44 if (max<0
45 || (drinks[i][DRINK_HEAL]>drinks[max][DRINK_HEAL] &&
46 drinks[max][DRINK_HEAL]<hdiff)
47 || (drinks[i][DRINK_HEAL]>=hdiff &&
48 drinks[i][DRINK_COST]<drinks[max][DRINK_COST]))
49 max=i;
50 }
51 if (max<0) return 0;
52 command("bestell "+drinks[max][DRINK_IDS][0]);
53 return 1;
54}
55
56void DrinkLoop() {
57 while (remove_call_out("DrinkLoop")>=0);
58 if (!Drink())
59 return;
60 call_out("DrinkLoop",0);
61}
62