Elin Decompiled Documentation EA 23.288 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, owner);
106 break;
107 case EffectId.Poison:
108 BlendPoison(c, t, owner);
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, Card source, bool dream = false)
149 {
150 Msg.Say("blend_love", t);
151 Thing thing = t.Split(1);
152 thing.elements.ModBase(dream ? 704 : 703, source.IsBlessed ? 15 : (source.IsCursed ? 5 : 10));
153 c.Pick(thing);
154 }
155
156 public static void BlendPoison(Chara c, Thing t, Card source)
157 {
158 Msg.Say("blend_poison", t);
159 Thing thing = t.Split(1);
160 thing.elements.ModBase(702, source.IsBlessed ? 5 : (source.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 }
171 if (owner.id == "water_jure")
172 {
174 }
176 {
177 n1 = N1,
178 isPerfume = (this is TraitPerfume),
179 refThing = owner.Thing,
180 act = ((source != null && source.id != 0) ? ACT.Create(source) : null)
181 });
183 }
184
185 public override void OnThrowGround(Chara c, Point p)
186 {
187 if (IdEffect != EffectId.Drink)
188 {
189 bool isHostileAct = c.IsPCParty && IsNeg;
190 CellEffect cellEffect = new CellEffect
191 {
192 id = 4,
193 idEffect = IdEffect,
194 power = Power,
195 amount = 5,
196 isHostileAct = isHostileAct,
197 color = BaseTileMap.GetColorInt(ref owner.GetRandomColor(), owner.sourceRenderCard.colorMod),
198 idEle = IdEle,
199 n1 = N1,
200 isBlessed = (owner.blessedState >= BlessedState.Blessed),
201 isCursed = (owner.blessedState <= BlessedState.Cursed)
202 };
203 if (IdEffect == EffectId.TransBlood)
204 {
205 cellEffect.refVal = owner.GetInt(118);
206 }
207 EClass._map.SetLiquid(p.x, p.z, cellEffect);
208 }
209 else
210 {
211 EClass._map.SetLiquid(p.x, p.z, 1, 3);
212 }
213 }
214
215 public override Action GetHealAction(Chara c)
216 {
217 if (IdEffect == EffectId.Heal)
218 {
219 return delegate
220 {
221 c.Drink(owner);
222 };
223 }
224 return null;
225 }
226}
BlessedState
Definition: BlessedState.cs:2
CTAG
Definition: CTAG.cs:2
EffectId
Definition: EffectId.cs:2
ID_Achievement
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:1035
static int GetColorInt(ref Color matColor, int p)
Definition: Card.cs:11
Thing Split(int a)
Definition: Card.cs:3566
ElementContainerCard elements
Definition: Card.cs:42
string id
Definition: Card.cs:36
bool IsEquipmentOrRangedOrAmmo
Definition: Card.cs:2270
bool IsFood
Definition: Card.cs:2215
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3977
bool isAcidproof
Definition: Card.cs:687
bool HasTag(CTAG tag)
Definition: Card.cs:2635
bool IsEquipment
Definition: Card.cs:2213
void ModEncLv(int a)
Definition: Card.cs:3928
virtual Thing Thing
Definition: Card.cs:2096
BlessedState blessedState
Definition: Card.cs:279
SourceCategory.Row category
Definition: Card.cs:2087
void ModNum(int a, bool notify=true)
Definition: Card.cs:3597
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7052
Definition: Chara.cs:10
bool HasCondition(string alias)
Definition: Chara.cs:9612
void Drink(Card t)
Definition: Chara.cs:5205
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4381
Definition: EClass.cs:6
static Map _map
Definition: EClass.cs:19
static SourceManager sources
Definition: EClass.cs:43
Element ModBase(int ele, int v)
static void ProcTrait(Chara c, Card t)
Definition: FoodEffect.cs:482
void SetLiquid(int x, int z, CellEffect effect=null)
Definition: Map.cs:1477
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: Steam.cs:10
static void GetAchievement(ID_Achievement id)
Definition: Steam.cs:51
Definition: Thing.cs:8
static void BlendPoison(Chara c, Thing t, Card source)
Definition: TraitDrink.cs:156
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
static void BlendLove(Chara c, Thing t, Card source, bool dream=false)
Definition: TraitDrink.cs:148
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:215
override void OnDrink(Chara c)
Definition: TraitDrink.cs:164
override bool IsNoShop
Definition: TraitDrink.cs:34
virtual int IdEle
Definition: TraitDrink.cs:20
override void OnThrowGround(Chara c, Point p)
Definition: TraitDrink.cs:185
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:577
Card owner
Definition: Trait.cs:28
Definition: ActRef.cs:2