/* FinalSun/FinalAlert 2 Mission Editor Copyright (C) 1999-2024 Electronic Arts, Inc. Authored by Matthias Wagner This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ // TeamTypes.cpp: Implementierungsdatei // #include "stdafx.h" #include "FinalSun.h" #include "TeamTypes.h" #include "FinalSunDlg.h" #include "mapdata.h" #include "variables.h" #include "functions.h" #include "inlines.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Eigenschaftenseite CTeamTypes IMPLEMENT_DYNCREATE(CTeamTypes, CDialog) CTeamTypes::CTeamTypes() : CDialog(CTeamTypes::IDD) { //{{AFX_DATA_INIT(CTeamTypes) m_Aggressive = FALSE; m_Annoyance = FALSE; m_AreTeamMembersRecruitable = FALSE; m_Autocreate = FALSE; m_AvoidThreats = FALSE; m_Droppod = FALSE; m_Full = FALSE; m_Group = _T(""); m_GuardSlower = FALSE; m_House = _T(""); m_IonImmune = FALSE; m_IsBaseDefense = FALSE; m_Loadable = FALSE; m_LooseRecruit = FALSE; m_Max = _T(""); m_Name = _T(""); m_OnlyTargetHouseEnemy = FALSE; m_OnTransOnly = FALSE; m_Prebuild = FALSE; m_Priority = _T(""); m_Recruiter = FALSE; m_Reinforce = FALSE; m_Script = _T(""); m_Suicide = FALSE; m_TaskForce = _T(""); m_TechLevel = _T(""); m_TransportReturnsOnUnload = FALSE; m_Waypoint = _T(""); m_Whiner = FALSE; m_VeteranLevel = _T(""); m_Tag = _T(""); m_TransportWaypoint = _T(""); m_MindControlDecision = _T(""); //}}AFX_DATA_INIT } CTeamTypes::~CTeamTypes() { } void CTeamTypes::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTeamTypes) DDX_Control(pDX, IDC_MCD_L, m_MCD_L); DDX_Control(pDX, IDC_TEAMTYPES, m_TeamTypes); DDX_Check(pDX, IDC_AGGRESSIVE, m_Aggressive); DDX_Check(pDX, IDC_ANNOYANCE, m_Annoyance); DDX_Check(pDX, IDC_ARETEAMMEMBERSRECRUITABLE, m_AreTeamMembersRecruitable); DDX_Check(pDX, IDC_AUTOCREATE, m_Autocreate); DDX_Check(pDX, IDC_AVOIDTHREATS, m_AvoidThreats); DDX_Check(pDX, IDC_DROPPOD, m_Droppod); DDX_Check(pDX, IDC_FULL, m_Full); DDX_CBString(pDX, IDC_GROUP, m_Group); DDX_Check(pDX, IDC_GUARDSLOWER, m_GuardSlower); DDX_CBString(pDX, IDC_HOUSE, m_House); DDX_Check(pDX, IDC_IONIMMUNE, m_IonImmune); DDX_Check(pDX, IDC_ISBASEDEFENSE, m_IsBaseDefense); DDX_Check(pDX, IDC_LOADABLE, m_Loadable); DDX_Check(pDX, IDC_LOOSERECRUIT, m_LooseRecruit); DDX_Text(pDX, IDC_MAX, m_Max); DDX_Text(pDX, IDC_NAME, m_Name); DDX_Check(pDX, IDC_ONLYTARGETHOUSEENEMY, m_OnlyTargetHouseEnemy); DDX_Check(pDX, IDC_ONTRANSONLY, m_OnTransOnly); DDX_Check(pDX, IDC_PREBUILD, m_Prebuild); DDX_Text(pDX, IDC_PRIORITY, m_Priority); DDX_Check(pDX, IDC_RECRUITER, m_Recruiter); DDX_Check(pDX, IDC_REINFORCE, m_Reinforce); DDX_CBString(pDX, IDC_SCRIPT, m_Script); DDX_Check(pDX, IDC_SUICIDE, m_Suicide); DDX_CBString(pDX, IDC_TASKFORCE, m_TaskForce); DDX_CBString(pDX, IDC_TECHLEVEL, m_TechLevel); DDX_Check(pDX, IDC_TRANSPORTRETURNSONUNLOAD, m_TransportReturnsOnUnload); DDX_CBString(pDX, IDC_WAYPOINT, m_Waypoint); DDX_Check(pDX, IDC_WHINER, m_Whiner); DDX_CBString(pDX, IDC_VETERANLEVEL, m_VeteranLevel); DDX_CBString(pDX, IDC_TAG, m_Tag); DDX_CBString(pDX, IDC_TRANSPORTWAYPOINT, m_TransportWaypoint); DDX_CBString(pDX, IDC_MINDCONTROLDECISION, m_MindControlDecision); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTeamTypes, CDialog) //{{AFX_MSG_MAP(CTeamTypes) ON_CBN_SELCHANGE(IDC_TEAMTYPES, OnSelchangeTeamtypes) ON_EN_CHANGE(IDC_NAME, OnChangeName) ON_BN_CLICKED(IDC_DELETETEAMTYPE, OnDeleteteamtype) ON_CBN_EDITCHANGE(IDC_VETERANLEVEL, OnEditchangeVeteranlevel) ON_CBN_EDITCHANGE(IDC_HOUSE, OnEditchangeHouse) ON_EN_CHANGE(IDC_PRIORITY, OnChangePriority) ON_EN_CHANGE(IDC_MAX, OnChangeMax) ON_CBN_EDITCHANGE(IDC_TECHLEVEL, OnEditchangeTechlevel) ON_CBN_EDITCHANGE(IDC_GROUP, OnEditchangeGroup) ON_CBN_EDITCHANGE(IDC_WAYPOINT, OnEditchangeWaypoint) ON_CBN_EDITCHANGE(IDC_SCRIPT, OnEditchangeScript) ON_CBN_EDITCHANGE(IDC_TASKFORCE, OnEditchangeTaskforce) ON_CBN_KILLFOCUS(IDC_VETERANLEVEL, OnKillfocusVeteranlevel) ON_CBN_KILLFOCUS(IDC_HOUSE, OnKillfocusHouse) ON_CBN_KILLFOCUS(IDC_TECHLEVEL, OnKillfocusTechlevel) ON_CBN_KILLFOCUS(IDC_GROUP, OnKillfocusGroup) ON_CBN_KILLFOCUS(IDC_WAYPOINT, OnKillfocusWaypoint) ON_CBN_KILLFOCUS(IDC_SCRIPT, OnKillfocusScript) ON_CBN_KILLFOCUS(IDC_TASKFORCE, OnKillfocusTaskforce) ON_WM_SHOWWINDOW() ON_BN_CLICKED(IDC_LOADABLE, OnLoadable) ON_BN_CLICKED(IDC_FULL, OnFull) ON_BN_CLICKED(IDC_ANNOYANCE, OnAnnoyance) ON_BN_CLICKED(IDC_GUARDSLOWER, OnGuardslower) ON_BN_CLICKED(IDC_RECRUITER, OnRecruiter) ON_BN_CLICKED(IDC_DROPPOD, OnDroppod) ON_BN_CLICKED(IDC_WHINER, OnWhiner) ON_BN_CLICKED(IDC_LOOSERECRUIT, OnLooserecruit) ON_BN_CLICKED(IDC_AGGRESSIVE, OnAggressive) ON_BN_CLICKED(IDC_SUICIDE, OnSuicide) ON_BN_CLICKED(IDC_AUTOCREATE, OnAutocreate) ON_BN_CLICKED(IDC_PREBUILD, OnPrebuild) ON_BN_CLICKED(IDC_ONTRANSONLY, OnOntransonly) ON_BN_CLICKED(IDC_REINFORCE, OnReinforce) ON_BN_CLICKED(IDC_AVOIDTHREATS, OnAvoidthreats) ON_BN_CLICKED(IDC_IONIMMUNE, OnIonimmune) ON_BN_CLICKED(IDC_TRANSPORTRETURNSONUNLOAD, OnTransportreturnsonunload) ON_BN_CLICKED(IDC_ARETEAMMEMBERSRECRUITABLE, OnAreteammembersrecruitable) ON_BN_CLICKED(IDC_ISBASEDEFENSE, OnIsbasedefense) ON_BN_CLICKED(IDC_ONLYTARGETHOUSEENEMY, OnOnlytargethouseenemy) ON_BN_CLICKED(IDC_NEWTEAMTYPE, OnNewteamtype) ON_CBN_EDITCHANGE(IDC_TAG, OnEditchangeTag) ON_CBN_KILLFOCUS(IDC_TAG, OnKillfocusTag) ON_CBN_EDITCHANGE(IDC_TRANSPORTWAYPOINT, OnEditchangeTransportwaypoint) ON_CBN_KILLFOCUS(IDC_TRANSPORTWAYPOINT, OnKillfocusTransportwaypoint) ON_CBN_EDITCHANGE(IDC_MINDCONTROLDECISION, OnEditchangeMindcontroldecision) ON_CBN_KILLFOCUS(IDC_MINDCONTROLDECISION, OnKillfocusMindcontroldecision) //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL stob(const char* s) { if(_stricmp(s,"no")==NULL) { return FALSE; } return TRUE; } CString btos(BOOL b) { CString s="no"; if(b==TRUE) s="yes"; return s; } int letter2number(char let){ int reply=let-'A'; /*if(let=='A')reply=0; if(let=='B')reply=1; if(let=='C')reply=2; if(let=='D')reply=3; if(let=='E')reply=4; if(let=='F')reply=5; if(let=='G')reply=6; if(let=='H')reply=7; if(let=='I')reply=8; if(let=='J')reply=9; if(let=='K')reply=10; if(let=='L')reply=11; if(let=='M')reply=12; if(let=='N')reply=13; if(let=='O')reply=14; if(let=='P')reply=15; if(let=='Q')reply=16; if(let=='R')reply=17; if(let=='S')reply=18; if(let=='T')reply=19; if(let=='U')reply=20; if(let=='V')reply=21; if(let=='W')reply=22; if(let=='X')reply=23; if(let=='Y')reply=24; if(let=='Z')reply=25;*/ return reply; } char number2letter(int let){ int reply=let+'A'; /*if(let==0)reply='A'; if(let==1)reply='B'; if(let==2)reply='C'; if(let==3)reply='D'; if(let==4)reply='E'; if(let==5)reply='F'; if(let==6)reply='G'; if(let==7)reply='H'; if(let==8)reply='I'; if(let==9)reply='J'; if(let==10)reply='K'; if(let==11)reply='L'; if(let==12)reply='M'; if(let==13)reply='N'; if(let==14)reply='O'; if(let==15)reply='P'; if(let==16)reply='Q'; if(let==17)reply='R'; if(let==18)reply='S'; if(let==19)reply='T'; if(let==20)reply='U'; if(let==21)reply='V'; if(let==22)reply='W'; if(let==23)reply='X'; if(let==24)reply='Y'; if(let==25)reply='Z';*/ return reply; } int GetWaypoint(const char* c) { if(strlen(c)==0) return -1; int i; int res=0; for(i=0;iShowWindow(SW_HIDE); m_MCD_L.ShowWindow(SW_HIDE); } CIniFile& ini=Map->GetIniFile(); CComboBox& taskforces=*(CComboBox*)GetDlgItem(IDC_TASKFORCE); CComboBox& scripts=*(CComboBox*)GetDlgItem(IDC_SCRIPT); CComboBox& houses=*(CComboBox*)GetDlgItem(IDC_HOUSE); int sel=m_TeamTypes.GetCurSel(); while(m_TeamTypes.DeleteString(0)!=CB_ERR); while(taskforces.DeleteString(0)!=CB_ERR); while(scripts.DeleteString(0)!=CB_ERR); // MW 07/24/01: Clear: m_Aggressive=0; m_Annoyance=0; m_AreTeamMembersRecruitable=0; m_Autocreate=0; m_AvoidThreats=0; m_Droppod=0; m_Full=0; m_Group=""; m_GuardSlower=0; m_House=""; m_IonImmune=0; m_IsBaseDefense=0; m_Loadable=0; m_LooseRecruit=0; m_Max=""; m_Name=""; m_OnlyTargetHouseEnemy=0; m_OnTransOnly=0; m_Prebuild=0; m_Priority=""; m_Recruiter=0; m_Reinforce=0; m_Script=""; m_Suicide=0; m_Tag=""; m_TaskForce=""; m_TechLevel=""; m_TransportReturnsOnUnload=0; m_TransportWaypoint=""; m_VeteranLevel=""; m_MindControlDecision=""; UpdateData(FALSE); int i; for(i=0;iDeleteString(0)!=CB_ERR); // houses: rules.ini + map definitions! if(ini.sections.find("Houses")!=ini.sections.end()) { if(ini.sections["Houses"].values.size()==0) goto wasnohouse; // we use the map definitions! for(i=0;iAddString(*ini.sections["Houses"].GetValue(i)); } } else { wasnohouse: for(i=0;iAddString(*rules.sections["Houses"].GetValue(i)); } }*/ ListHouses(*house, FALSE, TRUE, TRUE); CComboBox* wayp; wayp=(CComboBox*)GetDlgItem(IDC_WAYPOINT); while(wayp->DeleteString(0)!=CB_ERR); // houses: rules.ini + map definitions! if(ini.sections.find("Waypoints")!=ini.sections.end()) { for(i=0;iAddString(*ini.sections["Waypoints"].GetValueName(i)); } } wayp=(CComboBox*)GetDlgItem(IDC_TRANSPORTWAYPOINT); while(wayp->DeleteString(0)!=CB_ERR); // houses: rules.ini + map definitions! wayp->SetItemData(wayp->InsertString(0,TranslateStringACP("None")),0); if(ini.sections.find("Waypoints")!=ini.sections.end()) { for(i=0;iSetItemData(wayp->AddString(*ini.sections["Waypoints"].GetValueName(i)),1); } } #ifdef TS_MODE wayp->ShowWindow(SW_HIDE); #endif m_TeamTypes.SetCurSel(0); if(sel>=0) m_TeamTypes.SetCurSel(sel); OnSelchangeTeamtypes(); } void CTeamTypes::OnSelchangeTeamtypes() { CIniFile& ini=Map->GetIniFile(); if(m_TeamTypes.GetCurSel()<0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; m_Aggressive=stob(sec.values["Aggressive"]); m_Annoyance=stob(sec.values["Annoyance"]); m_AreTeamMembersRecruitable=stob(sec.values["AreTeamMembersRecruitable"]); m_Autocreate=stob(sec.values["Autocreate"]); m_AvoidThreats=stob(sec.values["AvoidThreats"]); m_Droppod=stob(sec.values["Droppod"]); m_Full=stob(sec.values["Full"]); m_Group=sec.values["Group"]; m_GuardSlower=stob(sec.values["GuardSlower"]); m_House=TranslateHouse(sec.values["House"], TRUE); m_IonImmune=stob(sec.values["IonImmune"]); m_IsBaseDefense=stob(sec.values["IsBaseDefense"]); m_Loadable=stob(sec.values["Loadable"]); m_LooseRecruit=stob(sec.values["LooseRecruit"]); m_Max=sec.values["Max"]; m_Name=sec.values["Name"]; m_OnlyTargetHouseEnemy=stob(sec.values["OnlyTargetHouseEnemy"]); m_OnTransOnly=stob(sec.values["OnTransOnly"]); m_Prebuild=stob(sec.values["Prebuild"]); m_Priority=sec.values["Priority"]; m_Recruiter=stob(sec.values["Recruiter"]); m_Reinforce=stob(sec.values["Reinforce"]); m_Script=(sec.values["Script"]); if(ini.sections.find(sec.values["Script"])!=ini.sections.end()) m_Script+=(" ("+ini.sections[sec.values["Script"]].values["Name"]+")"); m_Suicide=stob(sec.values["Suicide"]); if(sec.values.find("Tag")!=sec.values.end()) { m_Tag=sec.values["Tag"]; if(ini.sections["Tags"].values.find((LPCTSTR)m_Tag)!=ini.sections["Tags"].values.end()) { CString tag=m_Tag; m_Tag+=" "; m_Tag+=GetParam(ini.sections["Tags"].values[(LPCTSTR)tag], 1); } } else { m_Tag=GetLanguageStringACP("None"); } m_TaskForce=(sec.values["TaskForce"]); if(ini.sections.find(sec.values["TaskForce"])!=ini.sections.end()) m_TaskForce+=(" ("+ini.sections[sec.values["TaskForce"]].values["Name"]+")"); m_TechLevel=sec.values["TechLevel"]; m_TransportReturnsOnUnload=stob(sec.values["TransportsReturnOnUnload"]); m_VeteranLevel=sec.values["VeteranLevel"]; if(yuri_mode) m_MindControlDecision=sec.values["MindControlDecision"]; int w=GetWaypoint(sec.values["Waypoint"]); char c[50]; itoa(w,c,10); if(w!=-1) m_Waypoint=c; else m_Waypoint=""; #ifdef RA2_MODE if(isTrue(sec.values["UseTransportOrigin"])) { int w=GetWaypoint(sec.values["TransportWaypoint"]); char c[50]; itoa(w,c,10); if(w!=-1) m_TransportWaypoint=c; else m_TransportWaypoint=""; } else m_TransportWaypoint=TranslateStringACP("None"); #endif m_Whiner=stob(sec.values["Whiner"]); UpdateData(FALSE); } void CTeamTypes::OnChangeName() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CEdit& n=*(CEdit*)GetDlgItem(IDC_NAME); DWORD pos=n.GetSel(); CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Name"]=m_Name; UpdateDialog(); n.SetSel(pos); } void CTeamTypes::OnDeleteteamtype() { CIniFile& ini=Map->GetIniFile(); if(m_TeamTypes.GetCurSel()!=-1) { int res=MessageBox("Are you sure that you want to delete the selected team-type? If you delete it, don´t forget to delete any reference to the team-type.","Delete team-type",MB_YESNO); if(res==IDNO) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); int i; CIniFile& ini=Map->GetIniFile(); for(i=0;iUpdateDialogs(TRUE); //UpdateDialog(); } void CTeamTypes::OnEditchangeVeteranlevel() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["VeteranLevel"]=m_VeteranLevel; } void CTeamTypes::OnEditchangeHouse() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["House"]=TranslateHouse(m_House); } void CTeamTypes::OnChangePriority() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Priority"]=m_Priority; } void CTeamTypes::OnChangeMax() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Max"]=m_Max; } void CTeamTypes::OnEditchangeTechlevel() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["TechLevel"]=m_TechLevel; } void CTeamTypes::OnEditchangeGroup() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; //MessageBox(str); sec.values["Group"]=m_Group; } void CTeamTypes::OnEditchangeWaypoint() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; if(strlen(m_Waypoint)==0) sec.values["Waypoint"]=""; else sec.values["Waypoint"]=GetWaypoint(atoi(m_Waypoint)); } void CTeamTypes::OnEditchangeScript() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; CString tmp=m_Script; TruncSpace(tmp); sec.values["Script"]=tmp; } void CTeamTypes::OnEditchangeTaskforce() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; CString tmp=m_TaskForce; TruncSpace(tmp); sec.values["TaskForce"]=tmp; } void CTeamTypes::OnKillfocusVeteranlevel() { OnEditchangeVeteranlevel(); } void CTeamTypes::OnKillfocusHouse() { OnEditchangeHouse(); } void CTeamTypes::OnKillfocusTechlevel() { OnEditchangeTechlevel(); } void CTeamTypes::OnKillfocusGroup() { OnEditchangeGroup(); } void CTeamTypes::OnKillfocusWaypoint() { OnEditchangeWaypoint(); } void CTeamTypes::OnKillfocusScript() { OnEditchangeScript(); } void CTeamTypes::OnKillfocusTaskforce() { OnEditchangeTaskforce(); } void CTeamTypes::OnShowWindow(BOOL bShow, UINT nStatus) { CDialog::OnShowWindow(bShow, nStatus); if(!bShow) { OnKillfocusGroup(); OnKillfocusHouse(); OnKillfocusScript(); OnKillfocusTaskforce(); OnKillfocusTechlevel(); OnKillfocusVeteranlevel(); OnKillfocusWaypoint(); OnKillfocusTag(); #ifdef RA2_MODE OnKillfocusTransportwaypoint(); if(yuri_mode) OnKillfocusMindcontroldecision(); #endif } } void CTeamTypes::OnLoadable() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Loadable"]=btos(m_Loadable); } void CTeamTypes::OnFull() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Full"]=btos(m_Full); } void CTeamTypes::OnAnnoyance() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Annoyance"]=btos(m_Annoyance); } void CTeamTypes::OnGuardslower() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["GuardSlower"]=btos(m_GuardSlower); } void CTeamTypes::OnRecruiter() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Recruiter"]=btos(m_Recruiter); } void CTeamTypes::OnDroppod() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Droppod"]=btos(m_Droppod); } void CTeamTypes::OnWhiner() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Whiner"]=btos(m_Whiner); } void CTeamTypes::OnLooserecruit() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["LooseRecruit"]=btos(m_LooseRecruit); } void CTeamTypes::OnAggressive() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Aggressive"]=btos(m_Aggressive); } void CTeamTypes::OnSuicide() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Suicide"]=btos(m_Suicide); } void CTeamTypes::OnAutocreate() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Autocreate"]=btos(m_Autocreate); } void CTeamTypes::OnPrebuild() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Prebuild"]=btos(m_Prebuild); } void CTeamTypes::OnOntransonly() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["OnTransOnly"]=btos(m_OnTransOnly); } void CTeamTypes::OnReinforce() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["Reinforce"]=btos(m_Reinforce); } void CTeamTypes::OnAvoidthreats() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["AvoidThreats"]=btos(m_AvoidThreats); } void CTeamTypes::OnIonimmune() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["IonImmune"]=btos(m_IonImmune); } void CTeamTypes::OnTransportreturnsonunload() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["TransportsReturnOnUnload"]=btos(m_TransportReturnsOnUnload); } void CTeamTypes::OnAreteammembersrecruitable() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["AreTeamMembersRecruitable"]=btos(m_AreTeamMembersRecruitable); } void CTeamTypes::OnIsbasedefense() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["IsBaseDefense"]=btos(m_IsBaseDefense); } void CTeamTypes::OnOnlytargethouseenemy() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; sec.values["OnlyTargetHouseEnemy"]=btos(m_OnlyTargetHouseEnemy); } CString GetFree(const char* section); void CTeamTypes::OnNewteamtype() { CIniFile& ini=Map->GetIniFile(); CString id=GetFreeID() ; CString p; p=GetFree("TeamTypes"); ini.sections["TeamTypes"].values[p]=id; CIniFileSection& s=ini.sections[id]; s.values["Name"]="New teamtype"; s.values["VeteranLevel"]="1"; s.values["Loadable"]="no"; s.values["Full"]="yes"; s.values["Annoyance"]="no"; s.values["GuardSlower"]="no"; s.values["Recruiter"]="no"; s.values["Autocreate"]="yes"; s.values["Prebuild"]="no"; s.values["Reinforce"]="no"; s.values["Droppod"]="no"; s.values["Whiner"]="no"; s.values["LooseRecruit"]="no"; s.values["Aggressive"]="no"; s.values["Suicide"]="no"; s.values["Priority"]="5"; s.values["Max"]="5"; s.values["TechLevel"]="0"; s.values["Group"]="-1"; s.values["OnTransOnly"]="no"; s.values["AvoidThreats"]="no"; s.values["IonImmune"]="no"; s.values["TransportsReturnOnUnload"]="no"; s.values["AreTeamMembersRecruitable"]="no"; s.values["IsBaseDefense"]="no"; s.values["OnlyTargetHouseEnemy"]="no"; #ifdef RA2_MODE s.values["UseTransportOrigin"]="no"; if(yuri_mode) s.values["MindControlDecision"]="0"; #endif //UpdateDialog(); ((CFinalSunDlg*)theApp.m_pMainWnd)->UpdateDialogs(TRUE); int i; for(i=0;iGetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; TruncSpace(m_Tag); sec.values["Tag"]=m_Tag; if(m_Tag==GetLanguageStringACP("None") || m_Tag.GetLength()==0) { sec.values.erase("Tag"); } } void CTeamTypes::OnKillfocusTag() { OnEditchangeTag(); } void CTeamTypes::OnEditchangeTransportwaypoint() { #ifndef RA2_MODE return; #endif CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; if(strlen(m_TransportWaypoint)==0 || isSame(m_TransportWaypoint, TranslateStringACP("None"))) { sec.values.erase("TransportWaypoint"); sec.values["UseTransportOrigin"]="no"; } else { sec.values["TransportWaypoint"]=GetWaypoint(atoi(m_TransportWaypoint)); sec.values["UseTransportOrigin"]="yes"; } } void CTeamTypes::OnKillfocusTransportwaypoint() { OnEditchangeTransportwaypoint(); } void CTeamTypes::OnEditchangeMindcontroldecision() { CIniFile& ini=Map->GetIniFile(); UpdateData(TRUE); if(m_TeamTypes.GetCount()==0) return; CString str; str=GetText(&m_TeamTypes); TruncSpace(str); CIniFileSection& sec=ini.sections[(char*)(LPCTSTR)str]; CString tmp=m_MindControlDecision; TruncSpace(tmp); sec.values["MindControlDecision"]=tmp; } void CTeamTypes::OnKillfocusMindcontroldecision() { OnEditchangeMindcontroldecision(); }