12
21
22:- meta_predicate warnOnError(0). 23:- meta_predicate agent_call_safely(?,?,?). 24
25
28:- dynamic(npc_tick_tock_time/1). 29npc_tick_tock_time(60).
30
31npc_tick_tock:-
32 npc_tick_tock_time(Time),sleep(Time),
33 npc_tick.
34
35npc_tick:-
36 join_npcs_long_running,
37 findall(What-Who,npc_controller(What,Who),List),!,
38 my_random_member(What-Who,List),!,
39 ignore(in_thread_and_join(on_x_debug(tick_controller(What,Who)))).
40
41join_npcs_long_running.
42
44npc_controller(simple_world_agent_plan,Who):- no_repeats(tAgent(Who)), \+ has_tty(Who).
45
46tick_controller(simple_world_agent_plan,Who):- command_actTick(Who).
47
49
50move_or_sit_memory_idea(Agent,actMove(Dir),[Outlet]) :-
51 mudMemory(Agent,aDirectionsFn([Dir|_])),
52 number_to_dir(Num,Dir,vHere),
53 mudNearReach(Agent,List),
54 nth1(Num,List,What),
55 (What == [];
56 What == [Outlet]).
57move_or_sit_memory_idea(Agent,actSit,_) :-
58 req1(mudMemory(Agent,aDirectionsFn(Old))),
59 del(mudMemory(Agent,aDirectionsFn(Old))),
60 random_permutation(Old,New),
61 ain(mudMemory(Agent,aDirectionsFn(New))).
62
63
64command_actTick(Who):- (side_effect_prone),
65 ignore(current_agent(Who)),
66 must(nonvar(Who)),
67 with_agent(Who,
68 must_det_l((
69 show_failure(current_agent(Who)),
70 command_actIdea(Who,IdeaS),
71 my_random_member(Idea,IdeaS),!,
72 do_agent_call_plan_command(Who,Idea)))).
73
74
75
76get_world_agent_plan(W,Who,Idea):-no_repeats(with_agent(Who,call_no_cuts(world_agent_plan(W,Who,Idea)))).
77
78do_agent_call_plan_command(A,C):- t_l:agent_current_action(A,CC),dmsg(too_busy(CC,agent_call_plan_command(A,C))),!.
79do_agent_call_plan_command(A,C):-
80 with_agent(A,locally_tl(agent_current_action(A,C), do_agent_action(A,C))).
81
82
83command_actIdea(Who,IdeaSO):- (var(Who)->current_agent(Who);true),
84 side_effect_prone,
85 findall(Idea,
86 (get_world_agent_plan(current,Who,Idea),
87 dmsg(get_world_agent_plan(current,Who,Idea))),IdeaS),
88 (IdeaS=[_,_|_]->delete_eq(IdeaS,actLook,IdeaSO);IdeaSO=IdeaS),
89 (IdeaSO==[]->dmsg(noidea(actIdea(Who)));true).
90
91baseKB:action_info(actNpcTimer(ftInt),"sets how often to let NPCs run").
92
93baseKB:action_info(actTock,"Makes All NPCs do something brilliant").
94baseKB:action_info(actTick(tAgent),"Makes some agent do something brilliant").
95baseKB:action_info(actTick,"Makes *your* agent do something brilliant").
96
97baseKB:action_info(actIdea(isOptional(tAgent,isSelfAgent)),"Makes some agent (or self) think of something brilliant").
98baseKB:action_info(actProlog(ftCallable),"Call a ftCallable").
99
100baseKB:agent_text_command(Agent,["prolog",X],Agent,actProlog(X)):-ignore(X=ftCallable).
101baseKB:agent_text_command(Agent,["prolog"],Agent,actProlog(prolog_repl)).
103
104:-export(warnOnError/1). 105:-module_transparent(warnOnError/1). 106warnOnError(X):-catch(X,E,dmsg(error(E:X))).
107
108baseKB:agent_call_command(_Agent,actProlog(prolog_repl)) :- (side_effect_prone),true, prolog_repl,!.
109baseKB:agent_call_command(Agent,actProlog(C)) :- (side_effect_prone),true,nonvar(C),agent_call_safely(Agent,C).
110
111:-export(agent_call_safely/2). 112agent_call_safely(_Agnt,C):- any_to_callable(C,X,Vars), !, gensym(result_count_,RC),flag(RC,_,0),!,agent_call_safely(RC,X,Vars),flag(RC,CC,CC),fmt(result_count(CC)).
113agent_call_safely(RC,X,[]) :- !, call_u(quietly((warnOnError(doall(((X,flag(RC,CC,CC+1),fmt(cmdresult(X,true))))))))).
114agent_call_safely(RC,X,Vars) :- call_u(quietly((warnOnError(doall(((X,flag(RC,CC,CC+1),fmt(cmdresult(X,Vars))))))))).
115
116atom_to_term_safe(A,T,O):-catch(atom_to_term(A,T,O),_,fail)->T\==end_of_file.
117
118any_to_callable(C,X,Vs):- atom(C),!,atom_to_term_safe(C,XX,Vs1),!,any_to_callable0(XX,X,Vs2),term_variables((Vs1,Vs2),Vs),!.
119any_to_callable(T,X,Vs):- catch(text_to_string(T,S),_,fail),string_to_atom(S,C),atom_to_term_safe(C,XX,Vs1),!,any_to_callable0(XX,X,Vs2),term_variables((Vs1,Vs2),Vs),!.
120any_to_callable(C,X,Vs):- any_to_callable0(C,X,Vs).
121any_to_callable0(C,X,Vs):- expand_goal(C,X),term_variables((C,X),Vs),!.
123
124baseKB:agent_call_command(_Agent,actNpcTimer(Time)):-retractall(npc_tick_tock_time(_)),asserta(npc_tick_tock_time(Time)).
125baseKB:agent_call_command(Who,actTick) :- on_x_debug(command_actTick(Who)).
126baseKB:agent_call_command(_Agent,actIdea(Who)) :- must(command_actIdea(Who,Idea)),fmt(result_actIdea(Who,Idea)).
127baseKB:agent_call_command(_Agent,actTock) :- (side_effect_prone), npc_tick.
128baseKB:agent_call_command(_Agent,actTick(Other)) :-(side_effect_prone), baseKB:agent_call_command(Other,actTick).
129
130:- include(prologmud(mud_footer)).