Advertisement
Nuor

dialog_manager.script

Dec 6th, 2017
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 43.63 KB | None | 0 0
  1.  
  2. -------------------------------------------------------------------------------
  3. -- Dialog manager --------------------------------------------------------------
  4. -- Made by Peacemaker ----------------------------------------------------------
  5. -- 11.01.08 --------------------------------------------------------------------
  6. --------------------------------------------------------------------------------
  7. -- modified by Alundaio
  8.  
  9. RandomVal = 0
  10. disabled_phrases = {} -- temporary table of phrases which have been disabled during a conversation
  11. local quest_disabled_phrases = {} -- temporary table of phrases which have been disabled during a conversation
  12. local id_counter = 6 -- start from 5 because of adding root phrases
  13.  
  14. phrase_table = {
  15. hello = {},
  16. job = {},
  17. anomalies = {},
  18. place = {},
  19. information = {},
  20. tips = {}
  21. }
  22. priority_table = {
  23. hello = {},
  24. job = {},
  25. anomalies = {},
  26. place = {},
  27. information = {},
  28. tips = {}
  29. }
  30.  
  31.  
  32. ----------------------- Alundaio easy scripted_dialog
  33. local saved_dialog
  34. --local cond_list = {}
  35. function add_dialog(p_id,id,phrase_id,cond,act)
  36. if not ( saved_dialog ) then
  37. return
  38. end
  39.  
  40. local phrase = saved_dialog:AddPhrase(phrase_id,tostring(id),tostring(p_id),-10000)
  41. if not ( phrase ) then
  42. return
  43. end
  44.  
  45. --printf("phrase_id = %s",phrase_id)
  46.  
  47. local phrase_script = phrase:GetPhraseScript()
  48. if ( cond ) then
  49. if ( type(cond) == "table" ) then
  50. for key, value in pairs(cond) do
  51. if (alun_utils.findfunction(value,_G)) then
  52. phrase_script:AddPrecondition(value)
  53. --table.insert(cond_list,value)
  54. else
  55. printf("dialog_manager:Error: No such function exists '%s'",value)
  56. end
  57. end
  58. else
  59. if (alun_utils.findfunction(cond,_G)) then
  60. phrase_script:AddPrecondition(cond)
  61. --table.insert(cond_list,value)
  62. else
  63. printf("dialog_manager:Error: No such function exists '%s'",cond)
  64. end
  65. end
  66. end
  67.  
  68. if ( act ) then
  69. if ( type(act) == "table" ) then
  70. for key, value in pairs(act) do
  71. if (alun_utils.findfunction(value,_G)) then
  72. phrase_script:AddAction(value)
  73. else
  74. printf("dialog_manager:Error: No such function exists '%s'",value)
  75. end
  76. end
  77. else
  78. if (alun_utils.findfunction(act,_G)) then
  79. phrase_script:AddAction(act)
  80. else
  81. printf("dialog_manager:Error: No such function exists '%s'",act)
  82. end
  83. end
  84. end
  85. return phrase_script
  86. end
  87.  
  88. function add_script_dialog(p_id,id,phrase_id,cond,act)
  89. local d = add_dialog(p_id,id,phrase_id,cond,act)
  90. if (d) then
  91. d:SetScriptText(phrase_id)
  92. end
  93. end
  94. --
  95. -----------------------------------------------------
  96. -- Caravans
  97. -----------------------------------------------------
  98. function dm_active_caravans_dialog(dialog)
  99. saved_dialog = dialog
  100. add_script_dialog("",0,"caravans.text_dm_caravan_active","caravans.dm_caravan_active") -- NPC
  101. add_dialog(0,1,"st_caravan_active_yes",nil,"dialogs.break_dialog") -- ACTOR
  102. end
  103. function dm_reward_caravans_dialog(dialog)
  104. saved_dialog = dialog
  105. add_dialog("",0,"st_caravan_reward","caravans.dm_caravan_done","caravans.dm_caravan_reward") -- NPC
  106. add_dialog(0,1,"st_caravan_reward_done",nil,"dialogs.break_dialog") -- ACTOR
  107. end
  108. -----------------------------------------------------
  109. -- Dynamic special ammo Dialog
  110. -----------------------------------------------------
  111. function dm_init_dynamic_spec_loads_order_dialog(dialog)
  112. saved_dialog = dialog
  113. local as = dialogs_spec_loads.ammo_size
  114. local base_id = 1
  115. add_dialog("",0,"st_dm_spec_ammo_query") -- Actor start
  116. add_dialog(0,1,"st_dm_spec_ammo_start") -- NPC Ammo offer dialog
  117. for i=1,as do
  118. add_script_dialog(1,base_id+1,"dialogs_spec_loads.text_wpn_list_"..i,"dialogs_spec_loads.has_wpn_check_"..i,"dialogs_spec_loads.set_wpn_"..i) -- ACTOR show weapons list
  119. add_script_dialog(base_id+1,base_id+2,"dialogs_spec_loads.text_ammo_offer") -- NPC
  120. add_dialog(base_id+2,base_id+3,"st_dm_spec_ammo_price_accept","dialogs_spec_loads.has_ammo_cost","dialogs_spec_loads.buy_ammo") -- ACTOR
  121. add_script_dialog(base_id+3,base_id+4,"dialogs_spec_loads.text_ammo_processing") -- NPC
  122. add_dialog(base_id+4,base_id+5,"st_dm_spec_ammo_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  123. add_dialog(base_id+2,base_id+6,"st_dm_no_money","dialogs_spec_loads.hasnt_ammo_cost") -- ACTOR
  124. add_dialog(base_id+2,base_id+7,"st_dm_spec_ammo_no") -- ACTOR
  125. base_id = base_id+10
  126. end
  127. add_dialog(1,999,"st_dm_spec_ammo_none",nil,"dialogs.break_dialog") -- ACTOR
  128. end
  129. --
  130. function dm_init_dynamic_spec_loads_processing_dialog(dialog)
  131. saved_dialog = dialog
  132. add_dialog("",0,"st_dm_spec_ammo_in_process") -- ACTOR
  133. add_script_dialog(0,1,"dialogs_spec_loads.text_in_process","dialogs_spec_loads.has_ammo_processing") -- NPC
  134. add_dialog(1,2,"st_dm_spec_ammo_cancel") -- ACTOR
  135. add_dialog(2,3,"st_dm_spec_ammo_cancel_reply") -- NPC
  136. add_dialog(3,4,"st_dm_spec_ammo_cancel_reply_yes") -- ACTOR
  137. add_dialog(4,5,"st_dm_spec_ammo_cancel_reply_yes_done",nil,"dialogs_spec_loads.purchase_cancel") -- NPC
  138. add_dialog(5,6,"st_dm_spec_ammo_goodbye") -- ACTOR
  139. add_dialog(3,7,"st_dm_spec_ammo_cancel_reply_no") -- ACTOR
  140. add_dialog(7,8,"st_dm_spec_ammo_cancel_reply_no_done") -- NPC
  141. add_dialog(8,9,"st_dm_spec_ammo_cancel_back",nil,"dialogs.break_dialog") -- ACTOR
  142. add_script_dialog(0,10,"dialogs_spec_loads.text_ammo_pickup","dialogs_spec_loads.has_ammo_ready") -- NPC
  143. add_dialog(10,11,"st_dm_spec_ammo_pickup_done",nil,"dialogs_spec_loads.pickup_ammo") -- ACTOR
  144. add_dialog(11,12,"st_dm_spec_ammo_more") -- NPC
  145. add_dialog(12,13,"st_dm_spec_ammo_goodbye") -- ACTOR
  146. end
  147. --
  148. -----------------------------------------------------
  149. -- Dynamic order Dialog random
  150. -----------------------------------------------------
  151. function dm_init_dynamic_orders_random_dialog(dialog)
  152. saved_dialog = dialog
  153. local base_id = 1
  154.  
  155. add_dialog("",0,"st_dm_orders_query") -- ACTOR start order dialog
  156. -- place order
  157. add_script_dialog(0,1,"dialogs_orders_random.text_orders_query") -- NPC introduce list
  158. for i=1,10 do
  159. add_script_dialog(1,base_id+1,"dialogs_orders_random.text_category_title_"..i,"dialogs_orders_random.has_category_"..i,"dialogs_orders_random.set_category_"..i) -- ACTOR show list
  160. add_script_dialog(base_id+1,base_id+2,"dialogs_orders_random.text_offer_item") -- NPC
  161. add_script_dialog(base_id+2,base_id+3,"dialogs_orders_random.text_accept_offer_item", "dialogs_orders_random.has_prepay", "dialogs_orders_random.give_prepay") -- ACTOR
  162. add_script_dialog(base_id+3,base_id+4,"dialogs_orders_random.text_confirm_offer_item") -- NPC
  163. add_dialog(base_id+4,base_id+5,"st_dm_orders_place_finish",nil,"dialogs.break_dialog") -- ACTOR
  164. add_dialog(base_id+2,base_id+6,"st_dm_orders_no_money", "dialogs_orders_random.hasnt_prepay", "dialogs.break_dialog") -- ACTOR
  165. add_dialog(base_id+2,base_id+7,"st_dm_orders_none",nil,"dialogs.break_dialog") -- ACTOR
  166. base_id = base_id + 10
  167. end
  168. add_dialog(1,9999,"st_dm_orders_none",nil,"dialogs.break_dialog") -- ACTOR
  169. end
  170. function dm_init_dynamic_orders_processing_random_dialog(dialog)
  171. saved_dialog = dialog
  172. local base_id = 1
  173.  
  174. add_dialog("",0,"st_dm_orders_query_pickup") -- ACTOR start processing order dialog
  175. -- complete purchase existing
  176. add_script_dialog(0,3000,"dialogs_orders_random.orders_item_pickup_existing","dialogs_orders_random.has_done_item") -- NPC existing Order Pickup
  177. add_dialog(3000,3001,"st_dm_orders_pickup_existing_yes","dialogs_orders_random.has_item_cost") -- ACTOR
  178. add_dialog(3001,3002,"st_dm_orders_pickup_finish",nil,"dialogs_orders_random.buy_item") -- NPC
  179. add_dialog(3002,3003,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  180. add_dialog(3000,3010,"st_dm_orders_pickup_existing_no") -- ACTOR
  181. add_dialog(3010,3011,"st_dm_orders_pickup_refuse_warning") -- NPC
  182. add_dialog(3011,3012,"st_dm_orders_pickup_refuse_penalty") -- ACTOR
  183. add_dialog(3012,3013,"st_dm_orders_pickup_refuse_penalty_reply",nil,"dialogs_orders_random.purchase_cancel") -- NPC
  184. add_dialog(3013,3014,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  185. add_dialog(3011,3015,"st_dm_orders_pickup_refuse_wait") -- ACTOR
  186. add_dialog(3015,3016,"st_dm_orders_pickup_refuse_wait_rely") -- NPC
  187. add_dialog(3016,3017,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  188. add_dialog(3000,3020,"st_dm_orders_no_money","dialogs_orders_random.hasnt_item_cost") -- ACTOR
  189. add_dialog(3020,3021,"st_dm_orders_pickup_hold") -- NPC
  190. add_dialog(3021,3022,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  191. -- complete purchase
  192. add_script_dialog(0,2000,"dialogs_orders_random.orders_item_pickup","dialogs_orders_random.has_pickup_cond","dialogs_orders_random.randomize_item") -- NPC Order Pickup
  193. add_dialog(2000,2001,"st_dm_orders_pickup_price_accept","dialogs_orders_random.has_item_cost") -- ACTOR
  194. add_dialog(2001,2003,"st_dm_orders_pickup_finish",nil,"dialogs_orders_random.buy_item") -- NPC
  195. add_dialog(2003,2004,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  196. add_dialog(2000,2020,"st_dm_orders_no_money","dialogs_orders_random.hasnt_item_cost") -- ACTOR
  197. add_dialog(2020,2021,"st_dm_orders_pickup_hold") -- NPC
  198. add_dialog(2021,2022,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  199. add_dialog(2000,2030,"st_dm_orders_pickup_ponder","dialogs_orders_random.has_item_cost") -- ACTOR
  200. add_dialog(2030,2031,"st_dm_orders_pickup_ponder_reply") -- NPC
  201. add_dialog(2031,2032,"st_dm_orders_time_query_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  202. -- check and cancel ongoing order--
  203. add_script_dialog(0,1000,"dialogs_orders_random.processing_item","dialogs_orders_random.has_processing_cond") -- NPC Order processing
  204. add_dialog(1000,1001,"st_dm_orders_time_query") -- ACTOR
  205. add_dialog(1001,1002,"st_dm_orders_time_query_reply") -- NPC
  206. add_dialog(1002,1003,"st_dm_orders_time_query_goodbye") -- ACTOR
  207. add_dialog(1000,1010,"st_dm_orders_cancel") -- ACTOR
  208. add_dialog(1010,1011,"st_dm_orders_cancel_reply") -- NPC
  209. add_dialog(1011,1012,"st_dm_orders_cancel_reply_yes") -- ACTOR
  210. add_dialog(1012,1013,"st_dm_orders_cancel_reply_yes_done",nil,"dialogs_orders_random.purchase_cancel") -- NPC
  211. add_dialog(1013,1014,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  212. add_dialog(1011,1015,"st_dm_orders_cancel_reply_no") -- ACTOR
  213. add_dialog(1015,1016,"st_dm_orders_cancel_reply_no_done") -- NPC
  214. add_dialog(1016,1017,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  215. end
  216. -----------------------------------------------------
  217. -- Dynamic order Dialog
  218. -----------------------------------------------------
  219. function dm_init_dynamic_orders_dialog(dialog)
  220. saved_dialog = dialog
  221. local base_id,base_id2 = 1,0
  222. add_dialog("",0,"st_dm_orders_query") -- ACTOR start order dialog
  223. local cs,ls = dialogs_orders.cat_size, dialogs_orders.list_size
  224. -- printf("dm cat_size = %s list_size = %s", cs,ls)
  225. -- place order
  226. add_script_dialog(0,1,"dialogs_orders.text_orders_query") -- NPC introduce categories
  227. for i=1,cs do
  228. add_script_dialog(1,base_id+1,"dialogs_orders.text_category_title_"..i,"dialogs_orders.has_category_"..i,"dialogs_orders.set_category_"..i) -- ACTOR show categories
  229. base_id2 = base_id*1000
  230. add_script_dialog(base_id+1,base_id2,"dialogs_orders.text_item_offer_"..i) -- NPC introduce list
  231. for j=1,ls do
  232. add_script_dialog(base_id*1000,base_id2+1,"dialogs_orders.text_item_title_"..i..j,"dialogs_orders.has_item_"..i..j,"dialogs_orders.set_item_"..i..j)-- ACTOR show list
  233. add_script_dialog(base_id2+1,base_id2+2,"dialogs_orders.text_offer_item") -- NPC
  234. add_script_dialog(base_id2+2,base_id2+3,"dialogs_orders.text_accept_offer_item","dialogs_orders.has_prepay","dialogs_orders.give_prepay") -- ACTOR
  235. add_script_dialog(base_id2+3,base_id2+4,"dialogs_orders.text_confirm_offer_item") -- NPC
  236. add_dialog(base_id2+4,base_id2+5,"st_dm_orders_place_finish",nil,"dialogs.break_dialog") -- ACTOR
  237. add_dialog(base_id2+2,base_id2+6,"st_dm_orders_no_money","dialogs_orders.hasnt_prepay") -- ACTOR
  238. add_dialog(base_id2+2,base_id2+7,"st_dm_orders_none") -- ACTOR
  239. base_id2 = base_id2 + 10
  240. end
  241. add_dialog(base_id*1000,base_id*1000 + 99999,"st_dm_orders_none") -- ACTOR
  242. base_id = base_id + 2
  243. end
  244. add_dialog(1,99999,"st_dm_orders_none",nil,"dialogs.break_dialog") -- ACTOR
  245. end
  246. function dm_init_dynamic_orders_processing_dialog(dialog)
  247. saved_dialog = dialog
  248.  
  249. add_dialog("",0,"st_dm_orders_query_pickup") -- ACTOR start processing order dialog
  250. -- complete purchase existing
  251. add_script_dialog(0,2000,"dialogs_orders.text_orders_item_pickup","dialogs_orders.has_ready_item") -- NPC existing Order Pickup
  252. add_dialog(2000,2001,"st_dm_orders_pickup_existing_yes","dialogs_orders.has_item_cost") -- ACTOR
  253. add_dialog(2001,2002,"st_dm_orders_pickup_finish",nil,"dialogs_orders.buy_item") -- NPC
  254. add_dialog(2002,2003,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  255. add_dialog(2000,2010,"st_dm_orders_pickup_existing_no") -- ACTOR
  256. add_dialog(2010,2011,"st_dm_orders_pickup_refuse_warning") -- NPC
  257. add_dialog(2011,2012,"st_dm_orders_pickup_refuse_penalty") -- ACTOR
  258. add_dialog(2012,2013,"st_dm_orders_pickup_refuse_penalty_reply",nil,"dialogs_orders.purchase_cancel") -- NPC
  259. add_dialog(2013,2014,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  260. add_dialog(2011,2015,"st_dm_orders_pickup_refuse_wait") -- ACTOR
  261. add_dialog(2015,2016,"st_dm_orders_pickup_refuse_wait_rely") -- NPC
  262. add_dialog(2016,2017,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  263. add_dialog(2000,2020,"st_dm_orders_no_money","dialogs_orders.hasnt_item_cost") -- ACTOR
  264. add_dialog(2020,2021,"st_dm_orders_pickup_hold") -- NPC
  265. add_dialog(2021,2022,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  266. add_dialog(2000,2030,"st_dm_orders_pickup_ponder","dialogs_orders.has_item_cost") -- ACTOR
  267. add_dialog(2030,2031,"st_dm_orders_pickup_ponder_reply") -- NPC
  268. add_dialog(2031,2032,"st_dm_orders_time_query_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  269. -- check and cancel ongoing order--
  270. add_script_dialog(0,1000,"dialogs_orders.text_processing_item","dialogs_orders.has_order_processing") -- NPC Order processing
  271. add_dialog(1000,1001,"st_dm_orders_time_query") -- ACTOR
  272. add_dialog(1001,1002,"st_dm_orders_time_query_reply") -- NPC
  273. add_dialog(1002,1003,"st_dm_orders_time_query_goodbye") -- ACTOR
  274. add_dialog(1000,1010,"st_dm_orders_cancel") -- ACTOR
  275. add_dialog(1010,1011,"st_dm_orders_cancel_reply") -- NPC
  276. add_dialog(1011,1012,"st_dm_orders_cancel_reply_yes") -- ACTOR
  277. add_dialog(1012,1013,"st_dm_orders_cancel_reply_yes_done",nil,"dialogs_orders.purchase_cancel") -- NPC
  278. add_dialog(1013,1014,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  279. add_dialog(1011,1015,"st_dm_orders_cancel_reply_no") -- ACTOR
  280. add_dialog(1015,1016,"st_dm_orders_cancel_reply_no_done") -- NPC
  281. add_dialog(1016,1017,"st_dm_orders_goodbye",nil,"dialogs.break_dialog") -- ACTOR
  282. end
  283. -----------------------------------------------------
  284. -- Dynamic Ashot and Yar Dialog
  285. -----------------------------------------------------
  286. function dm_ashot_and_yar(a,b)
  287. local npc = dialogs.who_is_npc(a,b)
  288.  
  289. end
  290. -----------------------------------------------------
  291. -- Dynamic task Dialog
  292. -----------------------------------------------------
  293. function dm_init_dynamic_task_dialog(dialog)
  294. saved_dialog = dialog
  295.  
  296. -- loop is necessary to allow skipping of unwanted tasks
  297. local base_id = 0
  298.  
  299. -- ASK FOR AVAILABLE TASKS
  300. add_dialog("",base_id,"st_ordered_task_query",nil,"dialogs.generate_available_tasks") -- ACTOR
  301.  
  302. for i=1,10 do
  303. add_script_dialog(base_id,base_id+1,"dialogs.text_npc_has_task") -- NPC <---|
  304. add_dialog(base_id+1,base_id+2,"st_ordered_task_accept","dialogs.npc_has_task","dialogs.npc_give_task") -- ACTOR |
  305. add_dialog(base_id+2,base_id+3,"st_accepted_task_"..math.random(1,3)) -- NPC |
  306. add_dialog(base_id+3,base_id+4,"dm_universal_actor_exit_thanks") -- ACTOR |
  307. -- |
  308. add_dialog(base_id+1,base_id+10,"st_ordered_task_next","dialogs.npc_has_task","dialogs.npc_skip_task") -- ACTOR --->|
  309. add_dialog(base_id+1,base_id+8,"dm_universal_actor_exit") -- ACTOR
  310. base_id = base_id + 10
  311. end
  312. end
  313.  
  314. function dm_init_sim_dynamic_task_dialog(dialog)
  315. saved_dialog = dialog
  316.  
  317. -- loop is necessary to allow skipping of unwanted tasks
  318. local base_id = 0
  319.  
  320. -- ASK FOR AVAILABLE TASKS
  321. add_dialog("",base_id,"st_ordered_task_query",nil,"dialogs.sim_generate_available_tasks") -- ACTOR
  322.  
  323. for i=1,10 do
  324. add_script_dialog(base_id,base_id+1,"dialogs.text_npc_has_task") -- NPC <---|
  325. add_dialog(base_id+1,base_id+2,"st_ordered_task_accept","dialogs.npc_has_task","dialogs.npc_give_task") -- ACTOR |
  326. add_dialog(base_id+2,base_id+3,"st_accepted_task_"..math.random(1,3)) -- NPC |
  327. add_dialog(base_id+3,base_id+4,"dm_universal_actor_exit_thanks") -- ACTOR |
  328. -- |
  329. add_dialog(base_id+1,base_id+10,"st_ordered_task_next","dialogs.npc_has_task","dialogs.npc_skip_task") -- ACTOR --->|
  330. add_dialog(base_id+1,base_id+8,"dm_universal_actor_exit") -- ACTOR
  331. base_id = base_id + 10
  332. end
  333. end
  334.  
  335. function dm_init_dynamic_task_completed_dialog(dialog)
  336. saved_dialog = dialog
  337. local base_id = 0
  338.  
  339. -- TASK FINISHED TURN-IN
  340. add_dialog("",base_id,"st_ordered_task_query_finished","dialogs.actor_has_finished_task") -- ACTOR
  341. add_script_dialog(base_id,base_id+1,"dialogs.text_npc_task_finish",nil,"dialogs.npc_set_finished_task_complete") -- NPC
  342. add_dialog(base_id+1,base_id+2,"dm_universal_actor_exit_thanks") -- ACTOR
  343. end
  344.  
  345. function dm_init_sim_dynamic_task_completed_dialog(dialog)
  346. saved_dialog = dialog
  347. local base_id = 0
  348.  
  349. -- TASK FINISHED TURN-IN
  350. add_dialog("",base_id,"st_ordered_task_query_finished","dialogs.sim_actor_has_finished_task") -- ACTOR
  351. add_script_dialog(base_id,base_id+1,"dialogs.text_npc_task_finish",nil,"dialogs.npc_set_finished_task_complete") -- NPC
  352. add_dialog(base_id+1,base_id+2,"dm_universal_actor_exit_thanks") -- ACTOR
  353. end
  354.  
  355. function dm_init_dynamic_task_cancel_dialog(dialog)
  356. saved_dialog = dialog
  357. local base_id = 0
  358.  
  359. -- CANCEL TASKS
  360. add_dialog("",base_id,"st_ordered_task_query_cancel","dialogs.actor_has_ongoing_task") -- ACTOR
  361.  
  362. for i=1,10 do
  363. add_script_dialog(base_id,base_id+1,"dialogs.text_npc_has_cancel_task") -- NPC <---|
  364. add_script_dialog(base_id+1,base_id+2,"dialogs.text_actor_cancel_task","dialogs.npc_has_cancel_task","dialogs.npc_cancel_task") -- ACTOR |
  365. add_script_dialog(base_id+2,base_id+3,"dialogs.text_task_cancel") -- NPC |
  366. add_dialog(base_id+3,base_id+4,"dm_universal_actor_exit_sorry") -- ACTOR |
  367. -- |
  368. add_dialog(base_id+1,base_id+10,"st_ordered_task_query_cancel_next_job","dialogs.npc_has_cancel_task","dialogs.npc_skip_cancel_task") -- ACTOR --->|
  369. add_dialog(base_id+1,base_id+8,"dm_universal_actor_exit") -- ACTOR
  370. base_id = base_id + 10
  371. end
  372. end
  373.  
  374. function dm_init_sim_dynamic_task_cancel_dialog(dialog)
  375. saved_dialog = dialog
  376. local base_id = 0
  377.  
  378. -- CANCEL TASKS
  379. add_dialog("",base_id,"st_ordered_task_query_cancel","dialogs.sim_actor_has_ongoing_task") -- ACTOR
  380.  
  381. for i=1,10 do
  382. add_script_dialog(base_id,base_id+1,"dialogs.text_npc_has_cancel_task") -- NPC <---|
  383. add_script_dialog(base_id+1,base_id+2,"dialogs.text_actor_cancel_task","dialogs.npc_has_cancel_task","dialogs.npc_cancel_task") -- ACTOR |
  384. add_script_dialog(base_id+2,base_id+3,"dialogs.text_task_cancel") -- NPC |
  385. add_dialog(base_id+3,base_id+4,"dm_universal_actor_exit_sorry") -- ACTOR |
  386. -- |
  387. add_dialog(base_id+1,base_id+10,"st_ordered_task_query_cancel_next_job","dialogs.npc_has_cancel_task","dialogs.npc_skip_cancel_task") -- ACTOR --->|
  388. add_dialog(base_id+1,base_id+8,"dm_universal_actor_exit") -- ACTOR
  389. base_id = base_id + 10
  390. end
  391. end
  392.  
  393. -----------------------------------------------------
  394. -- Dynamic Broker Dialog
  395. -----------------------------------------------------
  396. function dm_init_dynamic_broker_dialog(dialog)
  397. saved_dialog = dialog
  398.  
  399. add_dialog("",0,"st_broker_query") -- Actor
  400. add_dialog(0,1,"st_broker_npc_start_"..math.random(1,3)) -- NPC
  401. add_script_dialog(1,2,"dialogs.text_actor_has_valuable_item","dialogs.condition_actor_has_valuable_item") -- Actor
  402. add_dialog(2,3,"st_broker_npc_answer_pda_query") -- NPC
  403. add_dialog(3,4,"st_broker_give_pda") -- Actor
  404. add_script_dialog(4,5,"dialogs.text_trade_npc_pda") -- NPC
  405. add_dialog(5,0,"st_broker_query_more") -- Actor
  406. add_dialog(5,1111,"dm_universal_actor_exit_thanks") -- Actor
  407. add_dialog(1,1111,"dm_universal_actor_exit") -- Actor
  408. end
  409.  
  410. -----------------------------------------------------
  411. -- Dynamic Yar and Ashot Dialog
  412. -----------------------------------------------------
  413. function dm_init_dynamic_ashot_and_yar_dialog(dialog)
  414. saved_dialog = dialog
  415.  
  416. add_dialog("",0,"jup_b19_freedom_yar_task_1_dm_query")
  417.  
  418. local script = add_dialog(0,1,"should not see this")
  419. script:SetScriptText("dialogs_jupiter.dm_ashot_and_yar_generate_dialog")
  420. end
  421.  
  422. -----------------------------------------------------
  423. -- Dynamic Repair Dialog
  424. -----------------------------------------------------
  425. function dm_init_dynamic_repair_dialog(dialog)
  426. saved_dialog = dialog
  427.  
  428. add_dialog("",0,"st_mechanic_query_items")
  429.  
  430. local script = add_dialog(0,1,"st_mechanic_repair_not_done","inventory_upgrades.dont_has_repaired_items")
  431. script:SetScriptText("inventory_upgrades.dm_repair_not_done")
  432. add_dialog(0,2,"st_mechanic_repair_done","inventory_upgrades.has_repaired_items","inventory_upgrades.give_repaired_items")
  433. end
  434.  
  435.  
  436. -----------------------------------------------------
  437. -- Dynamic Surrender Dialog
  438. -----------------------------------------------------
  439. function dm_init_surrender_dialog(dialog)
  440. saved_dialog = dialog
  441.  
  442. add_dialog("",0,"st_surrender_victim")
  443.  
  444. add_dialog(0,1,"st_surrender_query_victim_4","dialogs.victim_is_bounty")
  445. add_script_dialog(1,9,"dialogs.surrender_victim_answers_bounty")
  446. add_dialog(9,20,"st_surrender_actor_2",nil,{"dialogs.set_victim_surrendered","dialogs.break_dialog"})
  447. add_dialog(9,21,"st_surrender_actor_3",nil,{"dialogs.set_victim_surrendered","dialogs.break_dialog"})
  448.  
  449. add_dialog(0,2,"st_surrender_query_victim_1")
  450. add_script_dialog(2,10,"dialogs.surrender_victim_answers_1")
  451. add_dialog(10,20,"st_surrender_actor_2",nil,{"dialogs.set_victim_surrendered","dialogs.break_dialog"})
  452. add_dialog(10,21,"st_surrender_actor_3",nil,{"dialogs.set_victim_surrendered","dialogs.break_dialog"})
  453.  
  454. add_dialog(0,3,"st_surrender_query_victim_2")
  455. add_script_dialog(3,11,"dialogs.surrender_victim_answers_1")
  456. add_dialog(11,20,"st_surrender_actor_2",nil,{"dialogs.set_victim_surrendered","dialogs.break_dialog"})
  457. add_dialog(11,21,"st_surrender_actor_3",nil,{"dialogs.set_victim_surrendered","dialogs.break_dialog"})
  458.  
  459. add_dialog(0,4,"st_surrender_query_victim_3")
  460. add_script_dialog(4,12,"dialogs.surrender_victim_answers_2")
  461. add_dialog(12,20,"st_surrender_actor_1",nil,{"dialogs.set_victim_surrendered","dialogs.break_dialog"})
  462. end
  463.  
  464.  
  465. -- End Alundaio
  466. -----------------------------------------------------------------------------
  467.  
  468. -- Generate id for phrase
  469. function get_id()
  470. id_counter = id_counter + 1
  471. return id_counter
  472. end
  473.  
  474. -- Parse ini file and store all phrases and their parameters into phrase table
  475. function fill_phrase_table()
  476. local cfg = ini_file_ex("misc\\dialog_manager.ltx")
  477. local function itr(section)
  478. local val = cfg:r_value(section,"category") or "default"
  479. local category = (val == "hello" or val == "anomalies" or val == "place" or val == "job" or val == "information" or val == "tips") and val or "default"
  480. if (category ~= "default") then
  481. local temp_table = {}
  482. temp_table.info = {}
  483. temp_table.id = tostring(get_id())
  484. temp_table.name = section
  485.  
  486. local temp = cfg:r_value(section,"npc_community")
  487. temp_table.npc_community = temp and parse_names(temp) or "not_set"
  488.  
  489. temp = cfg:r_value(section,"actor_community")
  490. temp_table.actor_community = temp and parse_names(temp) or "not_set"
  491.  
  492. temp = cfg:r_value(section,"level")
  493. temp_table.level = temp and parse_names(temp) or "not_set"
  494.  
  495. temp_table.once = tostring(cfg:r_value(section,"once",1)) or "always"
  496. temp_table.wounded = tostring(cfg:r_value(section,"wounded",1)) or "false"
  497.  
  498. temp = cfg:r_value(section,"info")
  499. if (temp and temp ~= "") then
  500. xr_logic.parse_infop1(temp_table.info, temp)
  501. end
  502.  
  503. temp_table.smart = cfg:r_value(section,"smart") or ""
  504.  
  505. phrase_table[category][temp_table.id] = temp_table
  506. end
  507. end
  508.  
  509. cfg.ini:section_for_each(itr)
  510. end
  511.  
  512. -- Initialize npc start dialog
  513. function init_start_dialogs(dialog, str)
  514. saved_dialog = dialog
  515. --cond_list = empty_table(cond_list)
  516.  
  517. add_dialog("",0,"")
  518. add_dialog(0,1,"",nil,"dialog_manager.fill_priority_"..str.."_table")
  519.  
  520. local ph
  521. local p,d
  522. local script
  523. for k,v in pairs(phrase_table[str]) do
  524. if (v.wounded == "true") then
  525. script = add_dialog(1,v.id,v.name,{"dialogs.is_wounded","dialog_manager.precondition_"..str.."_dialogs"},"dialog_manager.action_"..str.."_dialogs")
  526. if (script) then
  527. ph = true
  528. add_dialog(v.id,get_id(),"dm_wounded_medkit",{"dialogs.actor_have_medkit"},{"dialogs.transfer_medkit","dialogs.break_dialog"})
  529. add_dialog(v.id,get_id(),"dm_wounded_sorry",nil,"dialogs.break_dialog")
  530. end
  531. else
  532. add_dialog(1,v.id,v.name,{"dialogs.is_not_wounded","dialog_manager.precondition_"..str.."_dialogs"},"dialog_manager.action_"..str.."_dialogs")
  533. ph = true
  534. end
  535. end
  536.  
  537. if not(ph) then
  538. add_dialog(1,2,"dm_"..str.."_general")
  539. end
  540. end
  541.  
  542. -- Initialize new actor dialog
  543. function init_new_dialog(dialog)
  544. local actor_table = { "job", "anomalies", "information", "tips" }
  545.  
  546. saved_dialog = dialog
  547. add_dialog("",0,"dm_universal_actor_start")
  548. add_dialog(0,1,"dm_universal_npc_start_"..math.random(1,4))
  549.  
  550. local ph,id,str
  551.  
  552. for i = 1,4 do
  553. local id = get_id()
  554. str = actor_table[i]
  555.  
  556. add_dialog(1,id,"dm_"..str.."_general_"..math.random(1,3),nil,"dialog_manager.fill_priority_"..str.."_table")
  557. local id2 = get_id()
  558. add_dialog(id,id2,"dm_no_more_"..math.random(1,10),"dialog_manager.precondition_"..str.."_dialogs_no_more")
  559. add_dialog(id,id2,"dm_do_not_know_"..math.random(1,10),"dialog_manager.precondition_"..str.."_dialogs_do_not_know")
  560.  
  561. for k,v in pairs(phrase_table[str]) do
  562. ph = true
  563. add_dialog(id,v.id,v.name,"dialog_manager.precondition_"..str.."_dialogs","dialog_manager.action_"..str.."_dialogs")
  564. end
  565.  
  566. if not (ph) then
  567. add_dialog(id,id2,"dm_"..str.."_do_not_know_"..math.random(1,3))
  568. end
  569. end
  570. add_dialog(1,get_id(),"dm_universal_actor_exit")
  571. end
  572.  
  573. -- Fill selected priority table
  574. function fill_priority_table(npc, PT_subtable, PRT_subtable)
  575. local npc_id = npc:id()
  576. if(PRT_subtable[npc_id]==nil) then
  577. PRT_subtable[npc_id] = {}
  578. end
  579.  
  580. for num, phrase in pairs(PT_subtable) do
  581. if (phrase) then
  582. calculate_priority(PRT_subtable, phrase, npc, phrase.id)
  583. end
  584. end
  585. end
  586.  
  587. function is_told(npc, str)
  588. local id = npc:id()
  589. if (priority_table[str] == nil or priority_table[str][id] == nil) then
  590. return true
  591. end
  592. if priority_table[str][id].told == true then
  593. return true
  594. end
  595. return false
  596. end
  597. -- Calculate precondition for default phrase in information dialog
  598. function precondition_no_more(npc, str, phrase_id)
  599. local id = npc:id()
  600. if (priority_table[str] == nil or priority_table[str][id] == nil) then
  601. return true
  602. end
  603.  
  604. local pr, id = get_highest_priority_phrase(phrase_table[str], priority_table[str], npc, phrase_id)
  605. if(pr<0) or (id==0) then
  606. printf("there is no avaliable "..str.." dialogs")
  607. return true
  608. end
  609.  
  610. if (PRT_subtable[id][phrase_id] == nil or PRT_subtable[id][phrase_id] == -1) then
  611. return true
  612. end
  613.  
  614. return false
  615. end
  616.  
  617. -- Calculate phrase's preconditions
  618. function precondition(npc, PT_subtable, PRT_subtable, phrase_id,dialog_name)
  619. if not (phrase_id) then
  620. printf("dialog_manager: no pharse_id for dialog %s",dialog_name)
  621. end
  622.  
  623. if not (PRT_subtable[npc:id()]) then
  624. --printf("dialog_manager:Error:No PRT_subtable for %s with phrase_id=%s and dialog_name=%s",npc:name(),phrase_id,dialog_name)
  625. reset_phrase_priority(PT_subtable, PRT_subtable, npc, phrase_id)
  626. return false
  627. end
  628.  
  629. if PRT_subtable[npc:id()] and PRT_subtable[npc:id()].told and PRT_subtable[npc:id()].told == true then
  630. return false
  631. end
  632. -- recalculate current phrase priority
  633. local priority = calculate_priority(PRT_subtable, PT_subtable[phrase_id], npc, phrase_id)
  634. -- if current phrase is with highest priority - show it
  635. return is_highest_priority_phrase(PT_subtable, PRT_subtable, npc, phrase_id)
  636. end
  637.  
  638. -- Calculate phrase priority
  639. function calculate_priority(PRT_subtable, PTID_subtable, npc, phrase_id)
  640. if not (PTID_subtable) then
  641. return
  642. end
  643.  
  644. local f_level = false
  645. local f_comm = false
  646. local priority = -1
  647. local npc_id = npc:id()
  648.  
  649. if(PTID_subtable.npc_community=="not_set") then
  650. f_comm = true
  651. elseif(PTID_subtable.npc_community[1]=="all") then
  652. priority = priority + 1
  653. f_comm = true
  654. else
  655. for i=1,#PTID_subtable.npc_community do
  656. if(PTID_subtable.npc_community[i]==character_community(npc)) then
  657. priority = priority + 2
  658. f_comm = true
  659. break
  660. end
  661. end
  662. priority = priority - 1
  663. end
  664.  
  665. if(PTID_subtable.level=="not_set") then
  666. f_level = true
  667. elseif(PTID_subtable.level[1]=="all") then
  668. priority = priority + 1
  669. f_level = true
  670. else
  671. for i=1,#PTID_subtable.level do
  672. if(PTID_subtable.level[i]==level.name()) then
  673. priority = priority + 2
  674. f_level = true
  675. break
  676. end
  677. end
  678. end
  679.  
  680. if(PTID_subtable.actor_community=="not_set") then
  681. priority = priority + 0
  682. elseif(PTID_subtable.actor_community=="all") then
  683. priority = priority + 1
  684. else
  685. for i=1,#PTID_subtable.actor_community do
  686. if(PTID_subtable.actor_community[i]==character_community(db.actor)) then
  687. priority = priority + 2
  688. break
  689. end
  690. end
  691. end
  692.  
  693. if(PTID_subtable.wounded=="true") then
  694. if not(xr_wounded.is_wounded(npc)) then
  695. priority = -1
  696. else
  697. priority = priority + 1
  698. end
  699. else
  700. if(xr_wounded.is_wounded(npc)) then
  701. priority = -1
  702. else
  703. priority = priority + 1
  704. end
  705. end
  706.  
  707. if f_comm == false or f_level == false then
  708. priority = -1
  709. end
  710.  
  711. if(PRT_subtable[npc_id].ignore_once) then
  712. if(PTID_subtable.once=="true") then
  713. priority = -1
  714. end
  715. end
  716.  
  717. if(PRT_subtable[npc_id][phrase_id]~=nil) and (PRT_subtable[npc_id][phrase_id]==255) then
  718. -- if there was set the highest priority for phrase
  719. priority = 255
  720. end
  721.  
  722. for k,v in pairs(PTID_subtable.info) do
  723. if v.name then
  724. if v.required == true then
  725. if not has_alife_info(v.name) then
  726. priority = -1
  727. break
  728. end
  729. else
  730. if has_alife_info(v.name) then
  731. priority = -1
  732. break
  733. end
  734. end
  735. end
  736. end
  737.  
  738.  
  739. PRT_subtable[npc_id][phrase_id] = priority
  740. return priority
  741. end
  742.  
  743. -- Set phrase end action
  744. function told(PRT_subtable, npc)
  745. PRT_subtable[npc:id()].told = true
  746. end
  747.  
  748. function action(PT_subtable, PRT_subtable, cur_phrase_id, npc)
  749. if not(PRT_subtable[npc:id()].ignore_once) then
  750. if(PT_subtable[cur_phrase_id].once=="true") then
  751. set_phrase_highest_priority(PT_subtable,PRT_subtable, npc, cur_phrase_id)
  752. end
  753. PRT_subtable[npc:id()].ignore_once = true
  754. end
  755. end
  756.  
  757. -- Set the highest priority to selected phrase
  758. function set_phrase_highest_priority(PT_subtable, PRT_subtable, npc, phrase_id)
  759. local npc_id = npc:id()
  760. if(PRT_subtable[npc_id]~=nil) then
  761. PRT_subtable[npc_id][phrase_id] = 255
  762. else
  763. PRT_subtable[npc_id] = {}
  764. PRT_subtable[npc_id][phrase_id] = 255
  765. end
  766. end
  767.  
  768. -- Reset phrase priority
  769. function reset_phrase_priority(PT_subtable, PRT_subtable, npc, phrase_id)
  770. if not (phrase_id) then
  771. return
  772. end
  773.  
  774. local npc_id = npc:id()
  775. if(PRT_subtable[npc_id]) then
  776. PRT_subtable[npc_id][phrase_id] = -1
  777. else
  778. PRT_subtable[npc_id] = {}
  779. PRT_subtable[npc_id][phrase_id] = calculate_priority(PRT_subtable, PT_subtable[phrase_id], npc, phrase_id)
  780. end
  781. end
  782.  
  783. -- Is the phrase priority the highest?
  784. function is_highest_priority_phrase(PT_subtable, PRT_subtable, npc, phrase_id)
  785. local npc_id = npc:id()
  786. if(PRT_subtable[npc_id]~=nil) then
  787. -- if there is a subtable for this npc
  788. local id = phrase_id
  789. local pr = PRT_subtable[npc_id][phrase_id]
  790. if pr == nil or pr < 0 then
  791. return false
  792. end
  793. for phr_id, priority in pairs(PRT_subtable[npc_id]) do
  794. -- iterate through array to get if selected phrase is with the highest priority
  795. if(phr_id~="ignore_once" and phr_id~="told") then
  796. if(priority>pr) then
  797. return false
  798. end
  799. end
  800. end
  801. return true
  802. else
  803. -- if there is no subtable for this npc - create it
  804. reset_phrase_priority(PT_subtable, PRT_subtable, npc, phrase_id)
  805. return false
  806. end
  807. end
  808.  
  809. -- Get the phrase with the highest priority
  810. function get_highest_priority_phrase(PT_subtable, PRT_subtable, npc, phrase_id)
  811. local npc_id = npc:id()
  812. if(PRT_subtable[npc_id]) then
  813. -- if there is a subtable for this npc
  814. local id = 0
  815. local pr = -1
  816. for phr_id, priority in pairs(PRT_subtable[npc_id]) do
  817. -- iterate through array for the highest priority phrase
  818. if(phr_id~="ignore_once" and phr_id~="told") then
  819. if(priority>pr) then
  820. pr = priority
  821. id = phr_id
  822. end
  823. end
  824. end
  825. return pr, id
  826. else
  827. -- if there is no subtable for this npc - create it
  828. reset_phrase_priority(PT_subtable, PRT_subtable, npc, phrase_id)
  829. return -1, 0
  830. end
  831. end
  832. --------------------------------------------------------------------------------
  833. -- Initializing, filling priority tables, setting preconditions and actions
  834. --------------------------------------------------------------------------------
  835. -- Initialize npc hello start dialog
  836. function init_hello_dialogs(dialog)
  837. init_start_dialogs(dialog, "hello")
  838. end
  839.  
  840. -- Fill phrase priority table for hello start dialog
  841. function fill_priority_hello_table(actor, npc, dialog_name, phrase_id)
  842. fill_priority_table(npc, phrase_table.hello, priority_table.hello)
  843. end
  844.  
  845. -- Fill phrase priority table for new dialog
  846. function fill_priority_job_table(actor, npc, dialog_name, phrase_id)
  847. fill_priority_table(npc, phrase_table.job, priority_table.job)
  848. end
  849. function fill_priority_anomalies_table(actor, npc, dialog_name, phrase_id)
  850. fill_priority_table(npc, phrase_table.anomalies, priority_table.anomalies)
  851. end
  852. --function fill_priority_place_table(actor, npc, dialog_name, phrase_id)
  853. -- fill_priority_table(npc, phrase_table.place, priority_table.place)
  854. --end
  855. function fill_priority_information_table(actor, npc, dialog_name, phrase_id)
  856. fill_priority_table(npc, phrase_table.information, priority_table.information)
  857. end
  858.  
  859. function fill_priority_tips_table(actor, npc, dialog_name, phrase_id)
  860. fill_priority_table(npc, phrase_table.tips, priority_table.tips)
  861. end
  862.  
  863. -- Calculate precondition for phrases in hello start dialog
  864. function precondition_hello_dialogs(npc, actor, dialog_name, parent_id, id)
  865. --printf("hello")
  866. return precondition(npc, phrase_table.hello, priority_table.hello, id,dialog_name)
  867. end
  868. -- Set phrase end action for hello start dialog
  869. function action_hello_dialogs(npc, actor, dialog_name, id)
  870. action(phrase_table.hello, priority_table.hello, id, npc)
  871. end
  872.  
  873. -- Calculate precondition for default phrase in occupation dialog
  874. function precondition_job_dialogs_no_more(npc, actor, dialog_name, parent_id, id)
  875. if is_told(npc, "job") == true then
  876. return true
  877. end
  878. return false
  879. end
  880.  
  881. function precondition_job_dialogs_do_not_know(npc, actor, dialog_name, parent_id, id)
  882. return precondition_no_more(npc, "job", id)
  883. end
  884.  
  885. -- Calculate preconditions for phrases in occupation dialog
  886. function precondition_job_dialogs(npc, actor, dialog_name, parent_id, id)
  887. --printf("job")
  888. return precondition(npc, phrase_table.job, priority_table.job, id,dialog_name)
  889. end
  890. -- Set phrase end action for occupation dialog
  891. function action_job_dialogs(npc, actor, dialog_name, id)
  892. action(phrase_table.job, priority_table.job, id, npc)
  893. told(priority_table.job, npc)
  894. end
  895.  
  896. -- Calculate precondition for default phrase in anomalies dialog
  897. function precondition_anomalies_dialogs_no_more(npc, actor, dialog_name, parent_id, id)
  898. if is_told(npc, "anomalies") == true then
  899. return true
  900. end
  901. return false
  902. end
  903.  
  904. function precondition_anomalies_dialogs_do_not_know(npc, actor, dialog_name, parent_id, id)
  905. return precondition_no_more(npc, "anomalies", id)
  906. end
  907. -- Calculate preconditions for phrases in anomalies dialog
  908. function precondition_anomalies_dialogs(npc, actor, dialog_name, parent_id, id)
  909. local smart = xr_gulag.get_npc_smart(npc)
  910. if priority_table.anomalies and priority_table.anomalies[npc:id()] and smart ~= nil and tostring(smart:name()) == phrase_table.anomalies[id].smart then
  911. priority_table.anomalies[npc:id()][id] = -1
  912. return false
  913. end
  914. --printf("anomalies")
  915. return precondition(npc, phrase_table.anomalies, priority_table.anomalies, id,dialog_name)
  916. end
  917. -- Set phrase end action for information dialog
  918. function action_anomalies_dialogs(npc, actor, dialog_name, id)
  919. action(phrase_table.anomalies, priority_table.anomalies, id, npc)
  920. told(priority_table.anomalies, npc)
  921. end
  922.  
  923. -- Calculate precondition for default phrase in information dialog
  924. function precondition_information_dialogs_no_more(npc, actor, dialog_name, parent_id, id)
  925. if is_told(npc, "information") == true then
  926. return true
  927. end
  928. return false
  929. end
  930.  
  931. function precondition_information_dialogs_do_not_know(npc, actor, dialog_name, parent_id, id)
  932. return precondition_no_more(npc, "information", id)
  933. end
  934. -- Calculate preconditions for phrases in information dialog
  935. function precondition_information_dialogs(npc, actor, dialog_name, parent_id, id)
  936. --printf("info")
  937. return precondition(npc, phrase_table.information, priority_table.information, id,dialog_name)
  938. end
  939. -- Set phrase end action for information dialog
  940. function action_information_dialogs(npc, actor, dialog_name, id)
  941. action(phrase_table.information, priority_table.information, id, npc)
  942. told(priority_table.information, npc)
  943. end
  944.  
  945. -- Tips
  946. -- Calculate precondition for default phrase in information dialog
  947. function precondition_tips_dialogs_no_more(npc, actor, dialog_name, parent_id, id)
  948. if is_told(npc, "tips") == true then
  949. return true
  950. end
  951. return false
  952. end
  953.  
  954. function precondition_tips_dialogs_do_not_know(npc, actor, dialog_name, parent_id, id)
  955. return precondition_no_more(npc, "tips", id)
  956. end
  957. -- Calculate preconditions for phrases in tips dialog
  958. function precondition_tips_dialogs(npc, actor, dialog_name, parent_id, id)
  959. --printf("tips")
  960. return precondition(npc, phrase_table.tips, priority_table.tips, id,dialog_name)
  961. end
  962. -- Set phrase end action for tips dialog
  963. function action_tips_dialogs(npc, actor, dialog_name, id)
  964. action(phrase_table.tips, priority_table.tips, id, npc)
  965. told(priority_table.tips, npc)
  966. end
  967.  
  968. local rnd = 0
  969.  
  970. function precondition_is_phrase_disabled(fs,ss,dn,ppi,pi)
  971. local npc = dialogs.who_is_npc(fs, ss)
  972. if(pi=="") then
  973. pi = dn
  974. end
  975. if (disabled_phrases[npc:id()] and disabled_phrases[npc:id()][pi]) or
  976. (quest_disabled_phrases[npc:id()] and quest_disabled_phrases[npc:id()][pi]) then
  977. return false
  978. else
  979. return true
  980. end
  981. end
  982.  
  983. function action_disable_phrase(fs,ss,dn,pi)
  984. local npc = dialogs.who_is_npc(fs, ss)
  985. if(pi=="0") then
  986. pi = dn
  987. end
  988. if(disabled_phrases[npc:id()]==nil) then
  989. disabled_phrases[npc:id()] = {}
  990. end
  991. disabled_phrases[npc:id()][pi] = true
  992. end
  993.  
  994. function action_disable_quest_phrase(fs,ss,dn,pi)
  995. local npc = dialogs.who_is_npc(fs, ss)
  996. if(pi=="0") then
  997. pi = dn
  998. end
  999. if(quest_disabled_phrases[npc:id()]==nil) then
  1000. quest_disabled_phrases[npc:id()] = {}
  1001. end
  1002. quest_disabled_phrases[npc:id()][pi] = true
  1003. end
  1004.  
  1005. function create_bye_phrase()
  1006. return game.translate_string("actor_break_dialog_"..RandomVal)
  1007. end
  1008.  
  1009. function uni_dialog_precond(first_speaker, second_speaker)
  1010. local npc = dialogs.who_is_npc(first_speaker, second_speaker)
  1011. return character_community(npc) ~= "zombied" and character_community(npc) ~= "monolith"
  1012. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement