Triggers.cpp 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458
  1. /*
  2. FinalSun/FinalAlert 2 Mission Editor
  3. Copyright (C) 1999-2024 Electronic Arts, Inc.
  4. Authored by Matthias Wagner
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation, either version 3 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program. If not, see <https://www.gnu.org/licenses/>.
  15. */
  16. // Triggers.cpp: Implementierungsdatei
  17. //
  18. #include "stdafx.h"
  19. #include "FinalSun.h"
  20. #include "Triggers.h"
  21. #include "FinalSunDlg.h"
  22. #include "mapdata.h"
  23. #include "variables.h"
  24. #include "functions.h"
  25. #include "inlines.h"
  26. CString GetWaypoint(int n);
  27. int GetWaypoint(const char* c);
  28. #ifdef _DEBUG
  29. #define new DEBUG_NEW
  30. #undef THIS_FILE
  31. static char THIS_FILE[] = __FILE__;
  32. #endif
  33. /////////////////////////////////////////////////////////////////////////////
  34. // Eigenschaftenseite CTriggers
  35. IMPLEMENT_DYNCREATE(CTriggers, CDialog)
  36. CTriggers::CTriggers() : CDialog(CTriggers::IDD)
  37. {
  38. //{{AFX_DATA_INIT(CTriggers)
  39. m_F1 = _T("");
  40. m_F2 = _T("");
  41. m_F3 = _T("");
  42. m_F4 = _T("");
  43. m_F5 = _T("");
  44. m_LA1 = _T("");
  45. m_LA2 = _T("");
  46. m_LA3 = _T("");
  47. m_LA4 = _T("");
  48. m_LA5 = _T("");
  49. m_LA6 = _T("");
  50. m_LE1 = _T("");
  51. m_LE2 = _T("");
  52. m_Name = _T("");
  53. m_LAW = _T("");
  54. //}}AFX_DATA_INIT
  55. }
  56. CTriggers::~CTriggers()
  57. {
  58. }
  59. void CTriggers::DoDataExchange(CDataExchange* pDX)
  60. {
  61. CDialog::DoDataExchange(pDX);
  62. //{{AFX_DATA_MAP(CTriggers)
  63. DDX_Control(pDX, IDC_EVENTPARAM2, m_E2);
  64. DDX_Control(pDX, IDC_EVENTPARAM1, m_E1);
  65. DDX_Control(pDX, IDC_ACTIONPARAM6, m_A6);
  66. DDX_Control(pDX, IDC_ACTIONPARAM5, m_A5);
  67. DDX_Control(pDX, IDC_ACTIONPARAM4, m_A4);
  68. DDX_Control(pDX, IDC_ACTIONPARAM3, m_A3);
  69. DDX_Control(pDX, IDC_ACTIONPARAM2, m_A2);
  70. DDX_Control(pDX, IDC_ACTIONPARAM1, m_A1);
  71. DDX_Control(pDX, IDC_HOUSE, m_House);
  72. DDX_Control(pDX, IDC_TRIGGER2, m_Trigger2);
  73. DDX_Control(pDX, IDC_TRIGGER, m_Trigger);
  74. DDX_Control(pDX, IDC_EVENTTYPE, m_EventType);
  75. DDX_Control(pDX, IDC_EVENT, m_Event);
  76. DDX_Control(pDX, IDC_ACTIONWAYPOINT, m_ActionWaypoint);
  77. DDX_Control(pDX, IDC_ACTIONTYPE, m_ActionType);
  78. DDX_Control(pDX, IDC_ACTION, m_Action);
  79. DDX_Text(pDX, IDC_FLAG1, m_F1);
  80. DDX_Text(pDX, IDC_FLAG2, m_F2);
  81. DDX_Text(pDX, IDC_FLAG3, m_F3);
  82. DDX_Text(pDX, IDC_FLAG4, m_F4);
  83. DDX_Text(pDX, IDC_FLAG5, m_F5);
  84. DDX_Text(pDX, IDC_LABEL_A1, m_LA1);
  85. DDX_Text(pDX, IDC_LABEL_A2, m_LA2);
  86. DDX_Text(pDX, IDC_LABEL_A3, m_LA3);
  87. DDX_Text(pDX, IDC_LABEL_A4, m_LA4);
  88. DDX_Text(pDX, IDC_LABEL_A5, m_LA5);
  89. DDX_Text(pDX, IDC_LABEL_A6, m_LA6);
  90. DDX_Text(pDX, IDC_LABEL_E1, m_LE1);
  91. DDX_Text(pDX, IDC_LABEL_E2, m_LE2);
  92. DDX_Text(pDX, IDC_NAME, m_Name);
  93. DDX_Text(pDX, IDC_WAYPOINT, m_LAW);
  94. //}}AFX_DATA_MAP
  95. }
  96. BEGIN_MESSAGE_MAP(CTriggers, CDialog)
  97. //{{AFX_MSG_MAP(CTriggers)
  98. ON_CBN_SELCHANGE(IDC_TRIGGER, OnSelchangeTrigger)
  99. ON_CBN_SELCHANGE(IDC_EVENT, OnSelchangeEvent)
  100. ON_CBN_SELCHANGE(IDC_ACTION, OnSelchangeAction)
  101. ON_CBN_EDITCHANGE(IDC_HOUSE, OnEditchangeHouse)
  102. ON_CBN_SELCHANGE(IDC_HOUSE, OnSelchangeHouse)
  103. ON_EN_CHANGE(IDC_NAME, OnChangeName)
  104. ON_EN_CHANGE(IDC_FLAG1, OnChangeFlag1)
  105. ON_EN_CHANGE(IDC_FLAG2, OnChangeFlag2)
  106. ON_EN_CHANGE(IDC_FLAG3, OnChangeFlag3)
  107. ON_EN_CHANGE(IDC_FLAG4, OnChangeFlag4)
  108. ON_EN_CHANGE(IDC_FLAG5, OnChangeFlag5)
  109. ON_CBN_EDITCHANGE(IDC_TRIGGER2, OnEditchangeTrigger2)
  110. ON_CBN_SELCHANGE(IDC_TRIGGER2, OnSelchangeTrigger2)
  111. ON_CBN_EDITCHANGE(IDC_EVENTTYPE, OnEditchangeEventtype)
  112. ON_CBN_SELCHANGE(IDC_EVENTTYPE, OnSelchangeEventtype)
  113. ON_CBN_EDITCHANGE(IDC_EVENTPARAM1, OnEditchangeEventparam1)
  114. ON_CBN_SELCHANGE(IDC_EVENTPARAM1, OnSelchangeEventparam1)
  115. ON_CBN_EDITCHANGE(IDC_EVENTPARAM2, OnEditchangeEventparam2)
  116. ON_CBN_SELCHANGE(IDC_EVENTPARAM2, OnSelchangeEventparam2)
  117. ON_CBN_EDITCHANGE(IDC_ACTIONTYPE, OnEditchangeActiontype)
  118. ON_CBN_SELCHANGE(IDC_ACTIONTYPE, OnSelchangeActiontype)
  119. ON_CBN_EDITCHANGE(IDC_ACTIONWAYPOINT, OnEditchangeActionwaypoint)
  120. ON_CBN_SELCHANGE(IDC_ACTIONWAYPOINT, OnSelchangeActionwaypoint)
  121. ON_CBN_EDITCHANGE(IDC_ACTIONPARAM1, OnEditchangeActionparam1)
  122. ON_CBN_SELCHANGE(IDC_ACTIONPARAM1, OnSelchangeActionparam1)
  123. ON_CBN_EDITCHANGE(IDC_ACTIONPARAM2, OnEditchangeActionparam2)
  124. ON_CBN_SELCHANGE(IDC_ACTIONPARAM2, OnSelchangeActionparam2)
  125. ON_CBN_EDITCHANGE(IDC_ACTIONPARAM3, OnEditchangeActionparam3)
  126. ON_CBN_SELCHANGE(IDC_ACTIONPARAM3, OnSelchangeActionparam3)
  127. ON_CBN_EDITCHANGE(IDC_ACTIONPARAM4, OnEditchangeActionparam4)
  128. ON_CBN_SELCHANGE(IDC_ACTIONPARAM4, OnSelchangeActionparam4)
  129. ON_CBN_EDITCHANGE(IDC_ACTIONPARAM5, OnEditchangeActionparam5)
  130. ON_CBN_SELCHANGE(IDC_ACTIONPARAM5, OnSelchangeActionparam5)
  131. ON_CBN_EDITCHANGE(IDC_ACTIONPARAM6, OnEditchangeActionparam6)
  132. ON_CBN_SELCHANGE(IDC_ACTIONPARAM6, OnSelchangeActionparam6)
  133. ON_BN_CLICKED(IDC_ADDEVENT, OnAddevent)
  134. ON_BN_CLICKED(IDC_DELETEEVENT, OnDeleteevent)
  135. ON_BN_CLICKED(IDC_ADDACTION, OnAddaction)
  136. ON_BN_CLICKED(IDC_DELETEACTION, OnDeleteaction)
  137. ON_BN_CLICKED(IDC_DELETETRIGGER, OnDeletetrigger)
  138. ON_BN_CLICKED(IDC_ADDTRIGGER, OnAddtrigger)
  139. //}}AFX_MSG_MAP
  140. END_MESSAGE_MAP()
  141. /////////////////////////////////////////////////////////////////////////////
  142. // Behandlungsroutinen für Nachrichten CTriggers
  143. void CTriggers::UpdateDialog()
  144. {
  145. CIniFile& ini=Map->GetIniFile();
  146. int sel=m_Trigger.GetCurSel();
  147. int selat=m_Action.GetCurSel();
  148. int selev=m_Event.GetCurSel();
  149. while(m_Trigger.DeleteString(0)!=CB_ERR);
  150. while(m_Trigger2.DeleteString(0)!=CB_ERR);
  151. while(m_Action.DeleteString(0)!=CB_ERR);
  152. while(m_Event.DeleteString(0)!=CB_ERR);
  153. while(m_ActionWaypoint.DeleteString(0)!=CB_ERR);
  154. while(m_House.DeleteString(0)!=CB_ERR);
  155. while(m_ActionType.DeleteString(0)!=CB_ERR);
  156. while(m_EventType.DeleteString(0)!=CB_ERR);
  157. m_LE1="Parameter 1";
  158. m_LE2="Parameter 2";
  159. m_LA1="Param1";
  160. m_LA2="Param2";
  161. m_LA3="Param3";
  162. m_LA4="Param4";
  163. m_LA5="Param5";
  164. m_LA6="Param6";
  165. int i;
  166. m_Trigger2.AddString("<none>");
  167. for(i=0;i<ini.sections["Triggers"].values.size();i++)
  168. {
  169. CString type;
  170. CString s;
  171. type=*ini.sections["Triggers"].GetValueName(i);
  172. s=type;
  173. s+=" (";
  174. s+=GetParam(ini.sections["Triggers"].values[type], 2);
  175. s+=")";
  176. m_Trigger.AddString(s);
  177. m_Trigger2.AddString(s);
  178. }
  179. for(i=0;i<g_data.sections["Events"].values.size();i++)
  180. {
  181. CString eventid=*g_data.sections["Events"].GetValueName(i);
  182. CString eventdata=*g_data.sections["Events"].GetValue(i);
  183. CString text=eventid+" "+GetParam(eventdata,0);
  184. m_EventType.AddString(text);
  185. }
  186. for(i=0;i<g_data.sections["Actions"].values.size();i++)
  187. {
  188. CString actionid=*g_data.sections["Actions"].GetValueName(i);
  189. CString actiondata=*g_data.sections["Actions"].GetValue(i);
  190. CString text=actionid+" "+GetParam(actiondata,0);
  191. m_ActionType.AddString(text);
  192. }
  193. ListHouses(m_House, FALSE);
  194. CComboBox* wayp;
  195. wayp=(CComboBox*)GetDlgItem(IDC_ACTIONWAYPOINT);
  196. while(wayp->DeleteString(0)!=CB_ERR);
  197. if(ini.sections.find("Waypoints")!=ini.sections.end())
  198. {
  199. for(i=0;i<ini.sections["Waypoints"].values.size();i++)
  200. {
  201. wayp->AddString(*ini.sections["Waypoints"].GetValueName(i));
  202. }
  203. }
  204. if(sel==-1 || m_Trigger.SetCurSel(sel)==FALSE)
  205. {
  206. m_Trigger.SetCurSel(0);
  207. }
  208. if(selat==-1 || m_Trigger.SetCurSel(selat)==FALSE)
  209. {
  210. m_Action.SetCurSel(0);
  211. }
  212. if(selev==-1 || m_Trigger.SetCurSel(selev)==FALSE)
  213. {
  214. m_Event.SetCurSel(0);
  215. }
  216. OnSelchangeTrigger();
  217. }
  218. void CTriggers::OnSelchangeTrigger()
  219. {
  220. CIniFile& ini=Map->GetIniFile();
  221. int sel=m_Trigger.GetCurSel();
  222. if(sel<0) return;
  223. while(m_Action.DeleteString(0)!=CB_ERR);
  224. while(m_Event.DeleteString(0)!=CB_ERR);
  225. CString TriggerData, EventData, ActionData;
  226. CString CurrentTrigger;
  227. m_Trigger.GetLBText(sel, CurrentTrigger);
  228. TruncSpace(CurrentTrigger);
  229. TriggerData=ini.sections["Triggers"].values[CurrentTrigger];
  230. EventData=ini.sections["Events"].values[CurrentTrigger];
  231. ActionData=ini.sections["Actions"].values[CurrentTrigger];
  232. m_Name=GetParam(TriggerData, 2);
  233. m_House.SetWindowText(TranslateHouse(GetParam(TriggerData,0), TRUE));
  234. CString trig2=GetParam(TriggerData,1);
  235. if(ini.sections["Triggers"].values.find(trig2)!=ini.sections["Triggers"].values.end())
  236. {
  237. trig2+=" (";
  238. trig2+=GetParam( ini.sections["Triggers"].values[GetParam(TriggerData,1)],2);
  239. trig2+=")";
  240. }
  241. m_Trigger2.SetWindowText(trig2);
  242. m_F1=GetParam(TriggerData,3);
  243. m_F2=GetParam(TriggerData,4);
  244. m_F3=GetParam(TriggerData,5);
  245. m_F4=GetParam(TriggerData,6);
  246. m_F5=GetParam(TriggerData,7);
  247. // okay, now list all events and actions
  248. // -------------------------------------
  249. int i;
  250. // events
  251. for(i=0;i<atoi(GetParam(EventData, 0));i++)
  252. {
  253. char c[10];
  254. itoa(i,c,10);
  255. m_Event.AddString(c);
  256. }
  257. if(m_Event.SetCurSel(0)!=CB_ERR)
  258. OnSelchangeEvent();
  259. // actions
  260. for(i=0;i<atoi(GetParam(ActionData, 0));i++)
  261. {
  262. char c[10];
  263. itoa(i,c,10);
  264. m_Action.AddString(c);
  265. }
  266. if(m_Action.SetCurSel(0)!=CB_ERR)
  267. OnSelchangeAction();
  268. UpdateData(FALSE);
  269. }
  270. void CTriggers::OnSelchangeEvent()
  271. {
  272. CIniFile& ini=Map->GetIniFile();
  273. int sel=m_Trigger.GetCurSel();
  274. if(sel<0) return;
  275. int selev=m_Event.GetCurSel();
  276. if(selev<0) return;
  277. int i;
  278. CString CurrentTrigger;
  279. m_Trigger.GetLBText(sel, CurrentTrigger);
  280. TruncSpace(CurrentTrigger);
  281. CString EventData;
  282. EventData=ini.sections["Events"].values[(LPCTSTR)CurrentTrigger];
  283. int startpos=1+selev*3;
  284. CString EventType=GetParam(EventData,startpos);
  285. m_EventType.SetWindowText(EventType);
  286. for(i=0;i<m_EventType.GetCount();i++)
  287. {
  288. CString tmp;
  289. m_EventType.GetLBText(i,tmp);
  290. TruncSpace(tmp);
  291. if(tmp==EventType)
  292. m_EventType.SetCurSel(i);
  293. }
  294. m_E1.SetWindowText(GetParam(EventData,startpos+1));
  295. m_E2.SetWindowText(GetParam(EventData,startpos+2));
  296. OnEditchangeEventtype();
  297. }
  298. void CTriggers::OnSelchangeAction()
  299. {
  300. CIniFile& ini=Map->GetIniFile();
  301. int sel=m_Trigger.GetCurSel();
  302. if(sel<0) return;
  303. int selac=m_Action.GetCurSel();
  304. if(selac<0) return;
  305. int i;
  306. CString CurrentTrigger;
  307. m_Trigger.GetLBText(sel, CurrentTrigger);
  308. TruncSpace(CurrentTrigger);
  309. CString ActionData;
  310. ActionData=ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger];
  311. int startpos=1+selac*8;
  312. CString ActionType=GetParam(ActionData,startpos);
  313. m_ActionType.SetWindowText(ActionType);
  314. for(i=0;i<m_ActionType.GetCount();i++)
  315. {
  316. CString tmp;
  317. m_ActionType.GetLBText(i,tmp);
  318. TruncSpace(tmp);
  319. if(tmp==ActionType)
  320. m_ActionType.SetCurSel(i);
  321. }
  322. m_A1.SetWindowText(GetParam(ActionData,startpos+1));
  323. m_A2.SetWindowText(GetParam(ActionData,startpos+2));
  324. m_A3.SetWindowText(GetParam(ActionData,startpos+3));
  325. m_A4.SetWindowText(GetParam(ActionData,startpos+4));
  326. m_A5.SetWindowText(GetParam(ActionData,startpos+5));
  327. m_A6.SetWindowText(GetParam(ActionData,startpos+6));
  328. OnEditchangeActiontype();
  329. char wayp[50];
  330. itoa(GetWaypoint(GetParam(ActionData,startpos+7)), wayp, 10);
  331. m_ActionWaypoint.SetWindowText(wayp);
  332. }
  333. void CTriggers::OnEditchangeHouse()
  334. {
  335. CIniFile& ini=Map->GetIniFile();
  336. int sel=m_Trigger.GetCurSel();
  337. if(sel<0) return;
  338. CString CurrentTrigger;
  339. m_Trigger.GetLBText(sel, CurrentTrigger);
  340. TruncSpace(CurrentTrigger);
  341. CString house;
  342. m_House.GetWindowText(house);
  343. house=TranslateHouse(house);
  344. ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger], 0, (LPCTSTR)house);
  345. }
  346. void CTriggers::OnSelchangeHouse()
  347. {
  348. CIniFile& ini=Map->GetIniFile();
  349. int csel=m_House.GetCurSel();
  350. CString house;
  351. m_House.GetLBText(csel,house);
  352. m_House.SetWindowText(house);
  353. OnEditchangeHouse();
  354. }
  355. void CTriggers::OnChangeName()
  356. {
  357. CIniFile& ini=Map->GetIniFile();
  358. UpdateData();
  359. CEdit& name=*(CEdit*)GetDlgItem(IDC_NAME);
  360. int esel=name.GetSel();
  361. int sel=m_Trigger.GetCurSel();
  362. if(sel<0) return;
  363. CString CurrentTrigger;
  364. m_Trigger.GetLBText(sel, CurrentTrigger);
  365. TruncSpace(CurrentTrigger);
  366. ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger], 2, (LPCTSTR)m_Name);
  367. UpdateDialog();
  368. m_Trigger.SetCurSel(sel);
  369. OnSelchangeTrigger();
  370. name.SetSel(esel);
  371. }
  372. void CTriggers::OnChangeFlag1()
  373. {
  374. CIniFile& ini=Map->GetIniFile();
  375. UpdateData();
  376. int sel=m_Trigger.GetCurSel();
  377. if(sel<0) return;
  378. CString CurrentTrigger;
  379. m_Trigger.GetLBText(sel, CurrentTrigger);
  380. TruncSpace(CurrentTrigger);
  381. ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger], 3, (LPCTSTR)m_F1);
  382. }
  383. void CTriggers::OnChangeFlag2()
  384. {
  385. CIniFile& ini=Map->GetIniFile();
  386. UpdateData();
  387. int sel=m_Trigger.GetCurSel();
  388. if(sel<0) return;
  389. CString CurrentTrigger;
  390. m_Trigger.GetLBText(sel, CurrentTrigger);
  391. TruncSpace(CurrentTrigger);
  392. ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger], 4, (LPCTSTR)m_F2);
  393. }
  394. void CTriggers::OnChangeFlag3()
  395. {
  396. CIniFile& ini=Map->GetIniFile();
  397. UpdateData();
  398. int sel=m_Trigger.GetCurSel();
  399. if(sel<0) return;
  400. CString CurrentTrigger;
  401. m_Trigger.GetLBText(sel, CurrentTrigger);
  402. TruncSpace(CurrentTrigger);
  403. ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger], 5, (LPCTSTR)m_F3);
  404. }
  405. void CTriggers::OnChangeFlag4()
  406. {
  407. CIniFile& ini=Map->GetIniFile();
  408. UpdateData();
  409. int sel=m_Trigger.GetCurSel();
  410. if(sel<0) return;
  411. CString CurrentTrigger;
  412. m_Trigger.GetLBText(sel, CurrentTrigger);
  413. TruncSpace(CurrentTrigger);
  414. ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger], 6, (LPCTSTR)m_F4);
  415. }
  416. void CTriggers::OnChangeFlag5()
  417. {
  418. CIniFile& ini=Map->GetIniFile();
  419. UpdateData();
  420. int sel=m_Trigger.GetCurSel();
  421. if(sel<0) return;
  422. CString CurrentTrigger;
  423. m_Trigger.GetLBText(sel, CurrentTrigger);
  424. TruncSpace(CurrentTrigger);
  425. ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger], 7, (LPCTSTR)m_F5);
  426. }
  427. void CTriggers::OnEditchangeTrigger2()
  428. {
  429. CIniFile& ini=Map->GetIniFile();
  430. int sel=m_Trigger.GetCurSel();
  431. if(sel<0) return;
  432. CString CurrentTrigger;
  433. m_Trigger.GetLBText(sel, CurrentTrigger);
  434. TruncSpace(CurrentTrigger);
  435. CString trg;
  436. m_Trigger2.GetWindowText(trg);
  437. TruncSpace(trg);
  438. ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Triggers"].values[(LPCTSTR)CurrentTrigger], 1, (LPCTSTR)trg);
  439. }
  440. void CTriggers::OnSelchangeTrigger2()
  441. {
  442. CIniFile& ini=Map->GetIniFile();
  443. int csel=m_Trigger2.GetCurSel();
  444. CString trg;
  445. m_Trigger2.GetLBText(csel,trg);
  446. m_Trigger2.SetWindowText(trg);
  447. OnEditchangeTrigger2();
  448. }
  449. void CTriggers::OnEditchangeEventtype()
  450. {
  451. CIniFile& ini=Map->GetIniFile();
  452. int sel=m_Trigger.GetCurSel();
  453. if(sel<0) return;
  454. int sel2=m_Event.GetCurSel();
  455. if(sel2<0) return;
  456. CString e1,e2;
  457. m_E1.GetWindowText(e1);
  458. m_E2.GetWindowText(e2);
  459. while(m_E2.DeleteString(0)!=CB_ERR);
  460. while(m_E1.DeleteString(0)!=CB_ERR);
  461. m_E1.SetWindowText(e1);
  462. m_E2.SetWindowText(e2);
  463. CString CurrentTrigger;
  464. m_Trigger.GetLBText(sel, CurrentTrigger);
  465. TruncSpace(CurrentTrigger);
  466. CString eventtype;
  467. m_EventType.GetWindowText(eventtype);
  468. TruncSpace(eventtype);
  469. int pos=1+3*sel2;
  470. ini.sections["Events"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Events"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)eventtype);
  471. if(g_data.sections["Events"].FindName(eventtype)<0) return;
  472. CString ptype[2];
  473. ptype[0]=GetParam(g_data.sections["Events"].values[eventtype],1);
  474. ptype[1]=GetParam(g_data.sections["Events"].values[eventtype],2);
  475. int pListType[2];
  476. pListType[0]=atoi(GetParam(g_data.sections["ParamTypes"].values[ptype[0]], 1));
  477. pListType[1]=atoi(GetParam(g_data.sections["ParamTypes"].values[ptype[1]], 1));
  478. int i;
  479. for(i=0;i<2;i++)
  480. {
  481. CString* label;
  482. if(i==0) label=&m_LE1;
  483. if(i==1) label=&m_LE2;
  484. CComboBox* cb;
  485. if(i==0) cb=&m_E1;
  486. if(i==1) cb=&m_E2;
  487. CString old_sel;
  488. cb->GetWindowText(old_sel);
  489. TruncSpace(old_sel);
  490. if(atoi(ptype[i])<0)
  491. {
  492. char c[50];
  493. itoa(abs(atoi(ptype[i])), c, 10);
  494. cb->SetWindowText(c);
  495. *label="Static";
  496. continue;
  497. }
  498. *label=GetParam(g_data.sections["ParamTypes"].values[ptype[i]], 0);
  499. HandleParamList(*cb, pListType[i]);
  500. cb->SetWindowText(old_sel);
  501. int e;
  502. for(e=0;e<cb->GetCount();e++)
  503. {
  504. CString tmp;
  505. cb->GetLBText(e,tmp);
  506. TruncSpace(tmp);
  507. if(tmp==old_sel)
  508. cb->SetCurSel(e);
  509. }
  510. }
  511. UpdateData(FALSE);
  512. }
  513. void CTriggers::OnSelchangeEventtype()
  514. {
  515. int csel=m_EventType.GetCurSel();
  516. CString trg;
  517. m_EventType.GetLBText(csel,trg);
  518. m_EventType.SetWindowText(trg);
  519. OnEditchangeEventtype();
  520. }
  521. void CTriggers::OnEditchangeEventparam1()
  522. {
  523. CIniFile& ini=Map->GetIniFile();
  524. int sel=m_Trigger.GetCurSel();
  525. if(sel<0) return;
  526. int sel2=m_Event.GetCurSel();
  527. if(sel2<0) return;
  528. CString CurrentTrigger;
  529. m_Trigger.GetLBText(sel, CurrentTrigger);
  530. TruncSpace(CurrentTrigger);
  531. CString param1;
  532. m_E1.GetWindowText(param1);
  533. TruncSpace(param1);
  534. int pos=1+3*sel2+1;
  535. ini.sections["Events"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Events"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)param1);
  536. }
  537. void CTriggers::OnSelchangeEventparam1()
  538. {
  539. int csel=m_E1.GetCurSel();
  540. CString trg;
  541. m_E1.GetLBText(csel,trg);
  542. m_E1.SetWindowText(trg);
  543. OnEditchangeEventparam1();
  544. }
  545. void CTriggers::OnEditchangeEventparam2()
  546. {
  547. CIniFile& ini=Map->GetIniFile();
  548. int sel=m_Trigger.GetCurSel();
  549. if(sel<0) return;
  550. int sel2=m_Event.GetCurSel();
  551. if(sel2<0) return;
  552. CString CurrentTrigger;
  553. m_Trigger.GetLBText(sel, CurrentTrigger);
  554. TruncSpace(CurrentTrigger);
  555. CString param2;
  556. m_E2.GetWindowText(param2);
  557. TruncSpace(param2);
  558. int pos=1+3*sel2+2;
  559. ini.sections["Events"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Events"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)param2);
  560. }
  561. void CTriggers::OnSelchangeEventparam2()
  562. {
  563. int csel=m_E2.GetCurSel();
  564. CString trg;
  565. m_E2.GetLBText(csel,trg);
  566. m_E2.SetWindowText(trg);
  567. OnEditchangeEventparam2();
  568. }
  569. void CTriggers::OnEditchangeActiontype()
  570. {
  571. CIniFile& ini=Map->GetIniFile();
  572. int sel=m_Trigger.GetCurSel();
  573. if(sel<0) return;
  574. int sel2=m_Action.GetCurSel();
  575. if(sel2<0) return;
  576. CString a;
  577. m_A1.GetWindowText(a);
  578. while(m_A1.DeleteString(0)!=CB_ERR);
  579. m_A1.SetWindowText(a);
  580. m_A2.GetWindowText(a);
  581. while(m_A2.DeleteString(0)!=CB_ERR);
  582. m_A2.SetWindowText(a);
  583. m_A3.GetWindowText(a);
  584. while(m_A3.DeleteString(0)!=CB_ERR);
  585. m_A3.SetWindowText(a);
  586. m_A4.GetWindowText(a);
  587. while(m_A4.DeleteString(0)!=CB_ERR);
  588. m_A4.SetWindowText(a);
  589. m_A5.GetWindowText(a);
  590. while(m_A5.DeleteString(0)!=CB_ERR);
  591. m_A5.SetWindowText(a);
  592. m_A6.GetWindowText(a);
  593. while(m_A6.DeleteString(0)!=CB_ERR);
  594. m_A6.SetWindowText(a);
  595. CString CurrentTrigger;
  596. m_Trigger.GetLBText(sel, CurrentTrigger);
  597. TruncSpace(CurrentTrigger);
  598. CString actiontype;
  599. m_ActionType.GetWindowText(actiontype);
  600. TruncSpace(actiontype);
  601. int pos=1+8*sel2;
  602. ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)actiontype);
  603. if(g_data.sections["Actions"].FindName(actiontype)<0) return;
  604. CString ptype[6];
  605. ptype[0]=GetParam(g_data.sections["Actions"].values[actiontype],1);
  606. ptype[1]=GetParam(g_data.sections["Actions"].values[actiontype],2);
  607. ptype[2]=GetParam(g_data.sections["Actions"].values[actiontype],3);
  608. ptype[3]=GetParam(g_data.sections["Actions"].values[actiontype],4);
  609. ptype[4]=GetParam(g_data.sections["Actions"].values[actiontype],5);
  610. ptype[5]=GetParam(g_data.sections["Actions"].values[actiontype],6);
  611. if(GetParam(g_data.sections["Actions"].values[actiontype],7)=="0")
  612. m_LAW="Unused";
  613. else
  614. m_LAW="Waypoint:";
  615. int pListType[6];
  616. pListType[0]=atoi(GetParam(g_data.sections["ParamTypes"].values[ptype[0]], 1));
  617. pListType[1]=atoi(GetParam(g_data.sections["ParamTypes"].values[ptype[1]], 1));
  618. int i;
  619. for(i=0;i<6;i++)
  620. {
  621. CString* label;
  622. if(i==0) label=&m_LA1;
  623. if(i==1) label=&m_LA2;
  624. if(i==2) label=&m_LA3;
  625. if(i==3) label=&m_LA4;
  626. if(i==4) label=&m_LA5;
  627. if(i==5) label=&m_LA6;
  628. CComboBox* cb;
  629. if(i==0) cb=&m_A1;
  630. if(i==1) cb=&m_A2;
  631. if(i==2) cb=&m_A3;
  632. if(i==3) cb=&m_A4;
  633. if(i==4) cb=&m_A5;
  634. if(i==5) cb=&m_A6;
  635. CString old_sel;
  636. cb->GetWindowText(old_sel);
  637. TruncSpace(old_sel);
  638. if(atoi(ptype[i])<0)
  639. {
  640. char c[50];
  641. itoa(abs(atoi(ptype[i])), c, 10);
  642. cb->SetWindowText(c);
  643. *label="Static";
  644. continue;
  645. }
  646. *label = GetParam(g_data.sections["ParamTypes"].values[ptype[i]], 0);
  647. HandleParamList(*cb, pListType[i]);
  648. cb->SetWindowText(old_sel);
  649. int e;
  650. for(e=0;e<cb->GetCount();e++)
  651. {
  652. CString tmp;
  653. cb->GetLBText(e,tmp);
  654. TruncSpace(tmp);
  655. if(tmp==old_sel)
  656. cb->SetCurSel(e);
  657. }
  658. }
  659. /*
  660. switch(atoi(actiontype))
  661. {
  662. case 0:
  663. case 23:
  664. case 24:
  665. case 46:
  666. case 47:
  667. m_LA1="Unused:";
  668. m_LA2="Unused:";
  669. m_LA3="Unused:";
  670. m_LA4="Unused:";
  671. m_LA5="Unused:";
  672. m_LA6="Unused:";
  673. break;
  674. case 1:
  675. case 2:
  676. case 3:
  677. case 6:
  678. case 36:
  679. case 74:
  680. m_LA1="Unused:";
  681. m_LA2="House:";
  682. m_LA3="Unused:";
  683. m_LA4="Unused:";
  684. m_LA5="Unused:";
  685. m_LA6="Unused:";
  686. ListHouses(m_A2);
  687. break;
  688. case 4:
  689. m_LA1="Unknown =1:";
  690. m_LA2="TeamType:";
  691. m_LA3="Unused:";
  692. m_LA4="Unused:";
  693. m_LA5="Unused:";
  694. m_LA6="Unused:";
  695. m_A1.SetWindowText("1");
  696. OnEditchangeActionparam1();
  697. ListTeamTypes(m_A2);
  698. break;
  699. case 5:
  700. m_LA1="Unused?:";
  701. m_LA2="TeamType:";
  702. m_LA3="Unused:";
  703. m_LA4="Unused:";
  704. m_LA5="Unused:";
  705. m_LA6="Unused:";
  706. ListTeamTypes(m_A2);
  707. break;
  708. case 7:
  709. m_LA1="Unknown =1:";
  710. m_LA2="TeamType:";
  711. m_LA3="Unused:";
  712. m_LA4="Unused:";
  713. m_LA5="Unused:";
  714. m_LA6="Unused:";
  715. m_A1.SetWindowText("1");
  716. OnEditchangeActionparam1();
  717. ListTeamTypes(m_A2);
  718. break;
  719. case 8:
  720. case 17:
  721. case 18:
  722. m_LA1="Unused:";
  723. m_LA2="Waypoint:";
  724. m_LA3="Unused:";
  725. m_LA4="Unused:";
  726. m_LA5="Unused:";
  727. m_LA6="Unused:";
  728. ListWaypoints(m_A2);
  729. break;
  730. case 27:
  731. m_LA1="Unused:";
  732. m_LA2="Duration:";
  733. m_LA3="Unused:";
  734. m_LA4="Unused:";
  735. m_LA5="Unused:";
  736. m_LA6="Unused:";
  737. break;
  738. case 43:
  739. m_LA1="Unused:";
  740. m_LA2="Unknown:";
  741. m_LA3="Unused:";
  742. m_LA4="Unused:";
  743. m_LA5="Unused:";
  744. m_LA6="Unused:";
  745. m_A2.SetWindowText("7");
  746. OnEditchangeActionparam2();
  747. break;
  748. case 44:
  749. m_LA1="Unused:";
  750. m_LA2="Duration:";
  751. m_LA3="Unused:";
  752. m_LA4="Unused:";
  753. m_LA5="Unused:";
  754. m_LA6="Unused:";
  755. break;
  756. case 48:
  757. m_LA1="Unused:";
  758. m_LA2="Speed:";
  759. m_LA3="Unused:";
  760. m_LA4="Unused:";
  761. m_LA5="Unused:";
  762. m_LA6="Unused:";
  763. break;
  764. case 55:
  765. m_LA1="Unused:";
  766. m_LA2="Unknown:";
  767. m_LA3="Unused:";
  768. m_LA4="Unused:";
  769. m_LA5="Unused:";
  770. m_LA6="Unused:";
  771. m_A2.SetWindowText("1");
  772. OnEditchangeActionparam2();
  773. break;
  774. case 56:
  775. m_LA1="Unused:";
  776. m_LA2="Global:";
  777. m_LA3="Unused:";
  778. m_LA4="Unused:";
  779. m_LA5="Unused:";
  780. m_LA6="Unused:";
  781. break;
  782. case 58:
  783. m_LA1="Unused:";
  784. m_LA2="Size:";
  785. m_LA3="Unused:";
  786. m_LA4="Unused:";
  787. m_LA5="Unused:";
  788. m_LA6="Unused:";
  789. break;
  790. default:
  791. m_LA1="Param1:";
  792. m_LA2="Param2:";
  793. m_LA3="Param3:";
  794. m_LA4="Param4:";
  795. m_LA5="Param5:";
  796. m_LA6="Param6:";
  797. }
  798. */
  799. UpdateData(FALSE);
  800. }
  801. void CTriggers::OnSelchangeActiontype()
  802. {
  803. int csel=m_ActionType.GetCurSel();
  804. CString trg;
  805. m_ActionType.GetLBText(csel,trg);
  806. m_ActionType.SetWindowText(trg);
  807. OnEditchangeActiontype();
  808. }
  809. void CTriggers::OnEditchangeActionwaypoint()
  810. {
  811. CIniFile& ini=Map->GetIniFile();
  812. int sel=m_Trigger.GetCurSel();
  813. if(sel<0) return;
  814. int sel2=m_Action.GetCurSel();
  815. if(sel2<0) return;
  816. CString CurrentTrigger;
  817. m_Trigger.GetLBText(sel, CurrentTrigger);
  818. TruncSpace(CurrentTrigger);
  819. CString waypoint;
  820. m_ActionWaypoint.GetWindowText(waypoint);
  821. TruncSpace(waypoint);
  822. waypoint=GetWaypoint(atoi(waypoint));
  823. int pos=1+8*sel2+7;
  824. ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)waypoint);
  825. }
  826. void CTriggers::OnSelchangeActionwaypoint()
  827. {
  828. int csel=m_ActionWaypoint.GetCurSel();
  829. CString trg;
  830. m_ActionWaypoint.GetLBText(csel,trg);
  831. m_ActionWaypoint.SetWindowText(trg);
  832. OnEditchangeActionwaypoint();
  833. }
  834. void CTriggers::OnEditchangeActionparam1()
  835. {
  836. CIniFile& ini=Map->GetIniFile();
  837. int sel=m_Trigger.GetCurSel();
  838. if(sel<0) return;
  839. int sel2=m_Action.GetCurSel();
  840. if(sel2<0) return;
  841. CString CurrentTrigger;
  842. m_Trigger.GetLBText(sel, CurrentTrigger);
  843. TruncSpace(CurrentTrigger);
  844. CString p1;
  845. m_A1.GetWindowText(p1);
  846. TruncSpace(p1);
  847. int pos=1+8*sel2+1;
  848. ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)p1);
  849. }
  850. void CTriggers::OnSelchangeActionparam1()
  851. {
  852. int csel=m_A1.GetCurSel();
  853. CString trg;
  854. m_A1.GetLBText(csel,trg);
  855. m_A1.SetWindowText(trg);
  856. OnEditchangeActionparam1();
  857. }
  858. void CTriggers::OnEditchangeActionparam2()
  859. {
  860. CIniFile& ini=Map->GetIniFile();
  861. int sel=m_Trigger.GetCurSel();
  862. if(sel<0) return;
  863. int sel2=m_Action.GetCurSel();
  864. if(sel2<0) return;
  865. CString CurrentTrigger;
  866. m_Trigger.GetLBText(sel, CurrentTrigger);
  867. TruncSpace(CurrentTrigger);
  868. CString p2;
  869. m_A2.GetWindowText(p2);
  870. TruncSpace(p2);
  871. int pos=1+8*sel2+2;
  872. ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)p2);
  873. }
  874. void CTriggers::OnSelchangeActionparam2()
  875. {
  876. int csel=m_A2.GetCurSel();
  877. CString trg;
  878. m_A2.GetLBText(csel,trg);
  879. m_A2.SetWindowText(trg);
  880. OnEditchangeActionparam2();
  881. }
  882. void CTriggers::OnEditchangeActionparam3()
  883. {
  884. CIniFile& ini=Map->GetIniFile();
  885. int sel=m_Trigger.GetCurSel();
  886. if(sel<0) return;
  887. int sel2=m_Action.GetCurSel();
  888. if(sel2<0) return;
  889. CString CurrentTrigger;
  890. m_Trigger.GetLBText(sel, CurrentTrigger);
  891. TruncSpace(CurrentTrigger);
  892. CString p3;
  893. m_A3.GetWindowText(p3);
  894. TruncSpace(p3);
  895. int pos=1+8*sel2+3;
  896. ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)p3);
  897. }
  898. void CTriggers::OnSelchangeActionparam3()
  899. {
  900. int csel=m_A3.GetCurSel();
  901. CString trg;
  902. m_A3.GetLBText(csel,trg);
  903. m_A3.SetWindowText(trg);
  904. OnEditchangeActionparam3();
  905. }
  906. void CTriggers::OnEditchangeActionparam4()
  907. {
  908. CIniFile& ini=Map->GetIniFile();
  909. int sel=m_Trigger.GetCurSel();
  910. if(sel<0) return;
  911. int sel2=m_Action.GetCurSel();
  912. if(sel2<0) return;
  913. CString CurrentTrigger;
  914. m_Trigger.GetLBText(sel, CurrentTrigger);
  915. TruncSpace(CurrentTrigger);
  916. CString p4;
  917. m_A4.GetWindowText(p4);
  918. TruncSpace(p4);
  919. int pos=1+8*sel2+4;
  920. ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)p4);
  921. }
  922. void CTriggers::OnSelchangeActionparam4()
  923. {
  924. int csel=m_A4.GetCurSel();
  925. CString trg;
  926. m_A4.GetLBText(csel,trg);
  927. m_A4.SetWindowText(trg);
  928. OnEditchangeActionparam4();
  929. }
  930. void CTriggers::OnEditchangeActionparam5()
  931. {
  932. CIniFile& ini=Map->GetIniFile();
  933. int sel=m_Trigger.GetCurSel();
  934. if(sel<0) return;
  935. int sel2=m_Action.GetCurSel();
  936. if(sel2<0) return;
  937. CString CurrentTrigger;
  938. m_Trigger.GetLBText(sel, CurrentTrigger);
  939. TruncSpace(CurrentTrigger);
  940. CString p5;
  941. m_A5.GetWindowText(p5);
  942. TruncSpace(p5);
  943. int pos=1+8*sel2+5;
  944. ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)p5);
  945. }
  946. void CTriggers::OnSelchangeActionparam5()
  947. {
  948. int csel=m_A5.GetCurSel();
  949. CString trg;
  950. m_A5.GetLBText(csel,trg);
  951. m_A5.SetWindowText(trg);
  952. OnEditchangeActionparam5();
  953. }
  954. void CTriggers::OnEditchangeActionparam6()
  955. {
  956. CIniFile& ini=Map->GetIniFile();
  957. int sel=m_Trigger.GetCurSel();
  958. if(sel<0) return;
  959. int sel2=m_Action.GetCurSel();
  960. if(sel2<0) return;
  961. CString CurrentTrigger;
  962. m_Trigger.GetLBText(sel, CurrentTrigger);
  963. TruncSpace(CurrentTrigger);
  964. CString p6;
  965. m_A6.GetWindowText(p6);
  966. TruncSpace(p6);
  967. int pos=1+8*sel2+6;
  968. ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger]=SetParam(ini.sections["Actions"].values[(LPCTSTR)CurrentTrigger], pos, (LPCTSTR)p6);
  969. }
  970. void CTriggers::OnSelchangeActionparam6()
  971. {
  972. int csel=m_A6.GetCurSel();
  973. CString trg;
  974. m_A6.GetLBText(csel,trg);
  975. m_A6.SetWindowText(trg);
  976. OnEditchangeActionparam6();
  977. }
  978. void CTriggers::OnAddevent()
  979. {
  980. CIniFile& ini=Map->GetIniFile();
  981. int sel=m_Trigger.GetCurSel();
  982. if(sel<0) return;
  983. CString CurrentTrigger;
  984. m_Trigger.GetLBText(sel, CurrentTrigger);
  985. TruncSpace(CurrentTrigger);
  986. CIniFileSection& sec=ini.sections["Events"];
  987. int cval=atoi(GetParam(sec.values[(LPCTSTR)CurrentTrigger],0));
  988. cval++;
  989. char c[50];
  990. itoa(cval,c,10);
  991. sec.values[(LPCTSTR)CurrentTrigger]=SetParam(sec.values[(LPCTSTR)CurrentTrigger],0,c);
  992. sec.values[(LPCTSTR)CurrentTrigger]+=",13,0,0";
  993. UpdateDialog();
  994. m_Trigger.SetCurSel(sel);
  995. OnSelchangeTrigger();
  996. m_Event.SetCurSel(cval-1);
  997. OnSelchangeEvent();
  998. }
  999. void CTriggers::OnDeleteevent()
  1000. {
  1001. CIniFile& ini=Map->GetIniFile();
  1002. int sel=m_Trigger.GetCurSel();
  1003. if(sel<0) return;
  1004. int sel2=m_Event.GetCurSel();
  1005. if(sel2<0) return;
  1006. if(MessageBox("Do you really want to delete this event?","Delete event", MB_YESNO)==IDNO) return;
  1007. CString CurrentTrigger;
  1008. m_Trigger.GetLBText(sel, CurrentTrigger);
  1009. TruncSpace(CurrentTrigger);
  1010. CIniFileSection& sec=ini.sections["Events"];
  1011. CString data;
  1012. data=sec.values[(LPCTSTR)CurrentTrigger];
  1013. int v=atoi(GetParam(data,0));
  1014. char c[50];
  1015. v--;
  1016. itoa(v,c,10);
  1017. data=SetParam(data,0, c);
  1018. int pos=1+sel2*3;
  1019. int posc=1+v*3;
  1020. int i;
  1021. for(i=0;i<3;i++)
  1022. data=SetParam(data,pos+i, GetParam(data,posc+i));
  1023. char* cupos=(char*)(LPCTSTR)data;
  1024. for(i=0;i<posc;i++)
  1025. {
  1026. cupos=strchr(cupos+1, ',');
  1027. if(i==posc-1)
  1028. {
  1029. cupos[0]=0;
  1030. break;
  1031. }
  1032. }
  1033. sec.values[(LPCTSTR)CurrentTrigger]=data;
  1034. UpdateDialog();
  1035. m_Trigger.SetCurSel(sel);
  1036. OnSelchangeTrigger();
  1037. }
  1038. void CTriggers::OnAddaction()
  1039. {
  1040. CIniFile& ini=Map->GetIniFile();
  1041. int sel=m_Trigger.GetCurSel();
  1042. if(sel<0) return;
  1043. CString CurrentTrigger;
  1044. m_Trigger.GetLBText(sel, CurrentTrigger);
  1045. TruncSpace(CurrentTrigger);
  1046. CIniFileSection& sec=ini.sections["Actions"];
  1047. int cval=atoi(GetParam(sec.values[(LPCTSTR)CurrentTrigger],0));
  1048. cval++;
  1049. char c[50];
  1050. itoa(cval,c,10);
  1051. sec.values[(LPCTSTR)CurrentTrigger]=SetParam(sec.values[(LPCTSTR)CurrentTrigger],0,c);
  1052. sec.values[(LPCTSTR)CurrentTrigger]+=",0,0,0,0,0,0,0,A";
  1053. UpdateDialog();
  1054. m_Trigger.SetCurSel(sel);
  1055. OnSelchangeTrigger();
  1056. m_Action.SetCurSel(cval-1);
  1057. OnSelchangeAction();
  1058. }
  1059. void CTriggers::OnDeleteaction()
  1060. {
  1061. CIniFile& ini=Map->GetIniFile();
  1062. int sel=m_Trigger.GetCurSel();
  1063. if(sel<0) return;
  1064. int sel2=m_Action.GetCurSel();
  1065. if(sel2<0) return;
  1066. if(MessageBox("Do you really want to delete this action?","Delete action", MB_YESNO)==IDNO) return;
  1067. CString CurrentTrigger;
  1068. m_Trigger.GetLBText(sel, CurrentTrigger);
  1069. TruncSpace(CurrentTrigger);
  1070. CIniFileSection& sec=ini.sections["Actions"];
  1071. CString data;
  1072. data=sec.values[(LPCTSTR)CurrentTrigger];
  1073. int v=atoi(GetParam(data,0));
  1074. char c[50];
  1075. v--;
  1076. itoa(v,c,10);
  1077. data=SetParam(data,0, c);
  1078. int pos=1+sel2*8;
  1079. int posc=1+v*8;
  1080. int i;
  1081. for(i=0;i<3;i++)
  1082. data=SetParam(data,pos+i, GetParam(data,posc+i));
  1083. char* cupos=(char*)(LPCTSTR)data;
  1084. for(i=0;i<posc;i++)
  1085. {
  1086. cupos=strchr(cupos+1, ',');
  1087. if(i==posc-1)
  1088. {
  1089. cupos[0]=0;
  1090. break;
  1091. }
  1092. }
  1093. sec.values[(LPCTSTR)CurrentTrigger]=data;
  1094. UpdateDialog();
  1095. m_Trigger.SetCurSel(sel);
  1096. OnSelchangeTrigger();
  1097. }
  1098. void CTriggers::OnDeletetrigger()
  1099. {
  1100. CIniFile& ini=Map->GetIniFile();
  1101. int sel=m_Trigger.GetCurSel();
  1102. if(sel<0) return;
  1103. if(MessageBox("Do you really want to delete this trigger? Don´t forget to delete the attached tag (important!)","Delete trigger", MB_YESNO)==IDNO) return;
  1104. CString CurrentTrigger;
  1105. m_Trigger.GetLBText(sel, CurrentTrigger);
  1106. TruncSpace(CurrentTrigger);
  1107. ini.sections["Triggers"].values.erase((LPCTSTR)CurrentTrigger);
  1108. ini.sections["Events"].values.erase((LPCTSTR)CurrentTrigger);
  1109. ini.sections["Actions"].values.erase((LPCTSTR)CurrentTrigger);
  1110. //UpdateDialog();
  1111. ((CFinalSunDlg*)theApp.m_pMainWnd)->UpdateDialogs(TRUE);
  1112. }
  1113. void CTriggers::OnAddtrigger()
  1114. {
  1115. CIniFile& ini=Map->GetIniFile();
  1116. CString ID_T=GetFreeID();
  1117. ini.sections["Triggers"].values[ID_T]="GDI,<none>,New trigger,0,1,1,1,0";
  1118. ini.sections["Events"].values[ID_T]="0";
  1119. ini.sections["Actions"].values[ID_T]="0";
  1120. if(MessageBox("Trigger created. If you want to create a simple tag now, press Yes. The tag will be called ""New tag"", you should name it like the trigger (after you have set up the trigger).","Trigger created",MB_YESNO))
  1121. {
  1122. CString ID_TAG=GetFreeID();
  1123. ini.sections["Tags"].values[ID_TAG]="0,New tag,";
  1124. ini.sections["Tags"].values[ID_TAG]+=ID_T;
  1125. }
  1126. //UpdateDialog();
  1127. ((CFinalSunDlg*)theApp.m_pMainWnd)->UpdateDialogs(TRUE);
  1128. }