Elin Decompiled Documentation EA 23.130 Nightly
Loading...
Searching...
No Matches
TraitDrink.cs
Go to the documentation of this file.
1using System;
2
3public class TraitDrink : Trait
4{
5 public virtual EffectId IdEffect => (GetParam(1) ?? "Drink").ToEnum<EffectId>();
6
7 public virtual int Power
8 {
9 get
10 {
11 if (GetParam(2) == null)
12 {
13 return 100;
14 }
15 return GetParam(2).ToInt();
16 }
17 }
18
19 public virtual int IdEle
20 {
21 get
22 {
23 if (!AliasEle.IsEmpty())
24 {
25 return EClass.sources.elements.alias[AliasEle].id;
26 }
27 return 0;
28 }
29 }
30
31 public virtual SourceElement.Row source => null;
32
33 public override bool IsNoShop
34 {
35 get
36 {
37 if (source != null)
38 {
39 return source.tag.Contains("noShop");
40 }
41 return false;
42 }
43 }
44
45 public virtual string AliasEle => N1;
46
47 public virtual string N1 => GetParam(3);
48
49 public virtual bool IsNeg => owner.HasTag(CTAG.neg);
50
51 public override bool IsThrowMainAction => true;
52
53 public override ThrowType ThrowType => ThrowType.Potion;
54
55 public override bool IsBlendBase => IsBlend();
56
57 public override bool CanDrink(Chara c)
58 {
59 return true;
60 }
61
62 public bool IsBlend()
63 {
64 switch (IdEffect)
65 {
66 case EffectId.DrinkWater:
67 case EffectId.Poison:
68 case EffectId.Love:
69 case EffectId.Acidproof:
70 return true;
71 default:
72 return false;
73 }
74 }
75
76 public override bool CanBlend(Thing t)
77 {
78 switch (IdEffect)
79 {
80 case EffectId.Poison:
81 case EffectId.Love:
82 return t.IsFood;
83 case EffectId.Acidproof:
84 if (!t.isAcidproof)
85 {
87 }
88 return false;
89 case EffectId.DrinkWater:
90 if (t.category.ignoreBless != 1 && t.id != "water")
91 {
92 return t.id != "bucket";
93 }
94 return false;
95 default:
96 return false;
97 }
98 }
99
100 public override void OnBlend(Thing t, Chara c)
101 {
102 switch (IdEffect)
103 {
104 case EffectId.Love:
105 BlendLove(c, t);
106 break;
107 case EffectId.Poison:
108 BlendPoison(c, t);
109 break;
110 case EffectId.Acidproof:
111 c.Say("coated", t, c);
112 if (t.IsEquipment && owner.blessedState <= BlessedState.Cursed)
113 {
114 c.Say("blend_curse", t);
115 t.ModEncLv(-1);
116 }
117 else
118 {
119 t.isAcidproof = true;
120 }
121 break;
122 case EffectId.DrinkWater:
123 {
124 BlessedState blessedState = owner.blessedState;
125 t = t.Split(1);
126 if (blessedState >= BlessedState.Blessed)
127 {
128 Msg.Say("waterBless", t);
129 t.SetBlessedState(BlessedState.Blessed);
130 c.Pick(t);
131 }
132 else if (blessedState <= BlessedState.Cursed)
133 {
134 Msg.Say("waterCurse", t);
136 c.Pick(t);
137 }
138 else
139 {
141 }
142 break;
143 }
144 }
145 owner.ModNum(-1);
146 }
147
148 public static void BlendLove(Chara c, Thing t, bool dream = false)
149 {
150 Msg.Say("blend_love", t);
151 Thing thing = t.Split(1);
152 thing.elements.ModBase(dream ? 704 : 703, t.IsBlessed ? 15 : (t.IsCursed ? 5 : 10));
153 c.Pick(thing);
154 }
155
156 public static void BlendPoison(Chara c, Thing t)
157 {
158 Msg.Say("blend_poison", t);
159 Thing thing = t.Split(1);
160 thing.elements.ModBase(702, t.IsBlessed ? 5 : (t.IsCursed ? 15 : 10));
161 c.Pick(thing);
162 }
163
164 public override void OnDrink(Chara c)
165 {
166 if (owner.id == "334" && c.HasCondition<ConAwakening>())
167 {
168 c.RemoveCondition<ConAwakening>();
169 return;
170 }
172 {
173 n1 = N1,
174 isPerfume = (this is TraitPerfume),
175 refThing = owner.Thing,
176 act = ((source != null && source.id != 0) ? ACT.Create(source) : null)
177 });
179 }
180
181 public override void OnThrowGround(Chara c, Point p)
182 {
183 if (IdEffect != EffectId.Drink)
184 {
185 bool isHostileAct = c.IsPCParty && IsNeg;
187 {
188 id = 4,
189 idEffect = IdEffect,
190 power = Power,
191 amount = 5,
192 isHostileAct = isHostileAct,
193 color = BaseTileMap.GetColorInt(ref owner.GetRandomColor(), owner.sourceRenderCard.colorMod),
194 idEle = IdEle,
195 n1 = N1,
196 isBlessed = (owner.blessedState >= BlessedState.Blessed),
197 isCursed = (owner.blessedState <= BlessedState.Cursed)
198 });
199 }
200 else
201 {
202 EClass._map.SetLiquid(p.x, p.z, 1, 3);
203 }
204 }
205
206 public override Action GetHealAction(Chara c)
207 {
208 if (IdEffect == EffectId.Heal)
209 {
210 return delegate
211 {
212 c.Drink(owner);
213 };
214 }
215 return null;
216 }
217}
BlessedState
Definition: BlessedState.cs:2
CTAG
Definition: CTAG.cs:2
EffectId
Definition: EffectId.cs:2
ThrowType
Definition: ThrowType.cs:2
Definition: ACT.cs:6
static Act Create(int id)
Definition: ACT.cs:36
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
Definition: ActEffect.cs:824
Thing Split(int a)
Definition: Card.cs:3275
ElementContainerCard elements
Definition: Card.cs:37
string id
Definition: Card.cs:31
bool IsEquipmentOrRangedOrAmmo
Definition: Card.cs:2130
bool IsCursed
Definition: Card.cs:2155
bool IsFood
Definition: Card.cs:2075
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3642
bool isAcidproof
Definition: Card.cs:658
bool HasTag(CTAG tag)
Definition: Card.cs:2495
bool IsEquipment
Definition: Card.cs:2073
void ModEncLv(int a)
Definition: Card.cs:3593
virtual Thing Thing
Definition: Card.cs:1958
BlessedState blessedState
Definition: Card.cs:262
bool IsBlessed
Definition: Card.cs:2153
SourceCategory.Row category
Definition: Card.cs:1949
void ModNum(int a, bool notify=true)
Definition: Card.cs:3306
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6232
Definition: Chara.cs:10
bool HasCondition(string alias)
Definition: Chara.cs:8666
void Drink(Card t)
Definition: Chara.cs:4632
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:3940
Definition: EClass.cs:5
static Map _map
Definition: EClass.cs:18
static SourceManager sources
Definition: EClass.cs:42
Element ModBase(int ele, int v)
static void ProcTrait(Chara c, Card t)
Definition: FoodEffect.cs:360
void SetLiquid(int x, int z, CellEffect effect=null)
Definition: Map.cs:1464
Definition: Msg.cs:5
static string SayNothingHappen()
Definition: Msg.cs:96
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Definition: Point.cs:9
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
SourceElement elements
Definition: Thing.cs:8
static void BlendLove(Chara c, Thing t, bool dream=false)
Definition: TraitDrink.cs:148
virtual string AliasEle
Definition: TraitDrink.cs:45
virtual SourceElement.Row source
Definition: TraitDrink.cs:31
bool IsBlend()
Definition: TraitDrink.cs:62
virtual EffectId IdEffect
Definition: TraitDrink.cs:5
virtual bool IsNeg
Definition: TraitDrink.cs:49
virtual string N1
Definition: TraitDrink.cs:47
virtual int Power
Definition: TraitDrink.cs:8
override bool IsThrowMainAction
Definition: TraitDrink.cs:51
override bool IsBlendBase
Definition: TraitDrink.cs:55
override void OnBlend(Thing t, Chara c)
Definition: TraitDrink.cs:100
override Action GetHealAction(Chara c)
Definition: TraitDrink.cs:206
override void OnDrink(Chara c)
Definition: TraitDrink.cs:164
override bool IsNoShop
Definition: TraitDrink.cs:34
virtual int IdEle
Definition: TraitDrink.cs:20
static void BlendPoison(Chara c, Thing t)
Definition: TraitDrink.cs:156
override void OnThrowGround(Chara c, Point p)
Definition: TraitDrink.cs:181
override bool CanDrink(Chara c)
Definition: TraitDrink.cs:57
override bool CanBlend(Thing t)
Definition: TraitDrink.cs:76
Definition: Trait.cs:7
string GetParam(int i, string def=null)
Definition: Trait.cs:553
Card owner
Definition: Trait.cs:26
Definition: ActRef.cs:2