7
9:-swi_module(moduleUse, [do_act_use/3]). 10
11:- include(prologmud(mud_header)). 12
14
15meta_argtypes(action_verb_useable(vtVerb,tCol,ftTerm(tPred),ftTerm(tPred),ftTerm(tPred))).
16
17:- install_constant_renamer_until_eof. 18:- set_prolog_flag(do_renames_sumo,never). 19
20==>genls(isEach('PortableObject','ProtectiveAttire',tStowAble),tWieldAble).
21genls('FluidReservoir',tDrinkAble).
22genls(tWeapon,tWieldAble).
23genls(tContolDevice,tUseAble).
24genls(tWieldAble,tUseAble).
25genls(tCarryAble,tStowAble).
26
27
29prologHybrid(genlPreds/2).
30prologHybrid(genlInverse/2).
31prologHybrid(mudPossess/2).
32
33
34
35
37ttRelationType(locObjBasePred).
38locObjBasePred(P)==>(prologHybrid(P),rtBinaryPredicate(P)).
39locObjBasePred(P),genlInverse(P,Inverse) ==> locBaseObjPred(Inverse).
40locObjBasePred(localityOfObject).
41locObjBasePred(inRegion).
42
43singleValuedInArg(inRegion,2).
44
46ttRelationType(locBaseObjPred).
47locBaseObjPred(P)==>(prologHybrid(P),rtBinaryPredicate(P)).
48locBaseObjPred(P),genlInverse(P,Inverse) ==> locObjBasePred(Inverse).
49locBaseObjPred(mudContains).
50
52ttRelationType(locBaseObjPredHas).
53locBaseObjPredHas(P)==>locBaseObjPred(P).
54locBaseObjPredHas(P)==>
55 (genlPreds(P,mudPossess),
56 (t(P,A,O) ==> mudPossess(A,O))).
57locBaseObjPredHas(mudWielding).
58locBaseObjPredHas(mudStowing).
59locBaseObjPredHas(wearsClothing).
60
61
63prologMultiValued(locatedAtPrep(tSpatialThing,tSpatialThing,rtBinaryPredicate)).
64
65(locatedAtPrep(Obj,Whom,A),locatedAtPrep(Whom,Where,B))
66 ==> locatedAtPrep(Obj,Where,spatialPrepJoinFn(A,B)).
67
68locObjBasePred(P) ==>
69 (t(P,Obj,Base) <==> locatedAtPrep(Obj,Base,P)).
70
71locBaseObjPred(P) ==>
72 (t(P,Base,Obj) <==> locatedAtPrep(Obj,Base,P)).
73
75
76prologMultiValued(wearsClothing(tAgent,tWearAble)).
77prologMultiValued(mudWielding(tAgent,tWieldAble)).
78prologMultiValued(mudStowing(tAgent,tStowAble)).
79prologMultiValued(mudContains(tContainer,tObj)).
80
82prologHybrid(mudKnowing(tAgent,ftTerm)).
83genlPreds(mudKnowing,mudPossess).
84
86genlInverse(mudContains,mudInsideOf).
89
90
91prologHybrid(action_verb_useable/5).
94action_verb_useable(actWear,tWearAble,wearsClothing,mudPossess,mudStowing).
95action_verb_useable(actWield,tWieldAble,mudWielding,mudPossess,mudStowing).
96action_verb_useable(actStow,tStowAble,mudStowing,mudPossess,mudWielding).
98
99:- baseKB:import(logicmoo_util_strings:convert_to_cycString/2). 100
101
102==>(baseKB:action_info(Syntax,String):-
103 no_repeats([Syntax],(
104 call_u(action_verb_useable(ActUse,Wieldable,NowWielding,Possessing,Unstowed)),
105 Syntax=..[ActUse,isAnd([tNearestReachableItem,call(Possessing,isSelfAgent,isThis),Wieldable])])),
106 must_maplist(name_text_now,[ActUse,Wieldable,Possessing,NowWielding,Unstowed],List),
107 sformat(String,'~w a ~w that you ~w so it will be ~w and not be ~w afterwards.',List)).
108
109baseKB:agent_call_command(Agent,Syntax) :-
110 call_u((action_verb_useable(ActUse,_Wieldable,_NowWielding,_Possessing,_Unstowed),Syntax=..[ActUse,Obj])),
111 baseKB:agent_call_command_use(Agent,ActUse,Obj),!.
112
113
115baseKB:agent_call_command_use(Agent,ActUse,Obj) :-
116 must_det_l([
117 once((nearest_reachable_object(Agent,Obj))),
118 nop((ignore(props(Obj,mudWeight<2)),
119 ignore(do_act_affect(Agent,ActUse,Obj)))),
120 do_act_use(ActUse,Agent,Obj),
121 call_update_charge(Agent,ActUse)]).
122
124baseKB:agent_call_command_use(Agent,ActUse,_Obj) :-
125 call_update_charge(Agent,ActUse),
126 add_cmdfailure(Agent,ActUse).
127
128get_use_perminance(Obj,ActUse,TakeableType):-
129 ignore(props(Obj,mudPermanence(ActUse,TakeableType))),
130 ignore(TakeableType=vTakenMoves).
131
132do_act_use(ActUse,Agent,Obj) :-
133 must_det_l([
134 get_use_perminance(Obj,ActUse,TakeableType),
135 do_change_use(ActUse,Agent,Obj,TakeableType)]),!.
136
137
138get_add_remove_use(ActUse,Agent,NowWielding,Obj,Unstowed):-
139 must_det_l([
140 action_verb_useable(ActUse,Wieldable,NowWielding,Possessing,Unstowed),
141 show_failure(isa(Obj,Wieldable)),
142 143 144 show_failure(ireq(t(Possessing,Agent,Obj)))]).
145
147do_change_use(ActUse,Agent,Obj,vTakenDeletes):-
148 get_add_remove_use(ActUse,Agent,NowWielding,Obj,Unstowed),
149 detatch_object(Obj),
150 clr(t(Unstowed,Agent,Obj)),
151 ain(t(NowWielding,Agent,Obj)),
152 must_post_use(ActUse,Agent,Obj),
153 detatch_object(Obj).
154do_change_use(ActUse,Agent,_Source,vTakenCopyFn(What)) :-
155 get_add_remove_use(ActUse,Agent,NowWielding,Obj,Unstowed),
156 create_new_object([What],Obj),
157 detatch_object(Obj),
158 clr(t(Unstowed,Agent,Obj)),
159 ain(t(NowWielding,Agent,Obj)),
160 must_post_use(ActUse,Agent,Obj).
161do_change_use(ActUse,Agent,Obj,vTakenStays) :-
162 get_add_remove_use(ActUse,Agent,NowWielding,Obj,Unstowed),
163 mudAtLoc(Obj,Was),
164 detatch_object(Obj),
165 clr(t(Unstowed,Agent,Obj)),
166 ain(t(NowWielding,Agent,Obj)),
167 must_post_use(ActUse,Agent,Obj),
168 detatch_object(Obj),
169 ain(mudAtLoc(Obj,Was)).
171do_change_use(ActUse,Agent,Obj,vTakenMoves) :-
172 must_det_l((
173 get_add_remove_use(ActUse,Agent,NowWielding,Obj,Unstowed),
174 detatch_object(Obj),
175 clr(t(Unstowed,Agent,Obj)),
176 ain(t(NowWielding,Agent,Obj)),
177 must_post_use(ActUse,Agent,Obj))).
178
179must_post_use(ActUse,Agent,Obj):-
180 must_det_l((
181 get_add_remove_use(ActUse,Agent,NowWielding,Obj,Unstowed),
182 fmt([Agent,ActUse,Obj]),
183 REQ = t(NowWielding,Agent,Obj),
184 CLR = t(Unstowed,Agent,Obj),
185 (ireq(REQ) -> true; trace_or_throw(ireq(REQ))),
186 (ireq(CLR) -> trace_or_throw(not(ireq(REQ))); true))),!.
187
189update_charge(Agent,_ActWield) :-
190 padd(Agent,mudEnergy(+ -2)).
191
192:- include(prologmud(mud_footer)).