/* * Arcanum Editor - ROM area editor * Copyright (C) 1999 Lucas Wall <kthulhu@usa.net> * * 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 2 of the License, or * 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * If you make changes to the source and want to make the public you can * mail the diferences to me <kthulhu@usa.net> and I'll add them to the * main distribution. Of course your name will be added to the program with * information about the changes you made. * * * Packed on Thu Aug 19 03:02:20 1999 * */ /* * File: MobEd.cpp * * Changes: * * 19/08/99 Lucas Wall <kthulhu@usa.net> * First source release. Its quite messy and has no * comments. I never planed to release the source code... :-) * */ // MobEd.cpp : implementation file // #include "stdafx.h" #include "arcaed.h" #include "MobEd.h" #include "ShopEd.h" #include "MobprogEd.h" #include "MercDataEd.h" #include "SkillTrEdit.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif typedef struct { int level; int hit_num, hit_type, hit_bonus; int ac; int dam_num, dam_type, dam_bonus; } t_levmob; const t_levmob levmob[] = { { 1, 2, 6, 10, 90, 1, 4, 0 }, { 2, 2, 7, 21, 80, 1, 5, 0 }, { 3, 2, 6, 35, 70, 1, 6, 0 }, { 4, 2, 7, 46, 60, 1, 5, 1 }, { 5, 2, 6, 60, 50, 1, 6, 1 }, { 6, 2, 7, 71, 40, 1, 7, 1 }, { 7, 2, 6, 85, 40, 1, 8, 1 }, { 8, 2, 7, 96, 30, 1, 7, 2 }, { 9, 2, 6, 110, 20, 1, 8, 2 }, { 10, 2, 7, 121, 10, 2, 4, 2 }, { 11, 2, 8, 134, 10, 1, 10, 2 }, { 12, 2, 10, 150, 0, 1, 10, 3 }, { 13, 2, 10, 170, -10, 2, 5, 3 }, { 14, 2, 10, 190, -10, 1, 12, 3 }, { 15, 3, 9, 208, -20, 2, 6, 3 }, { 16, 3, 9, 233, -20, 2, 6, 4 }, { 17, 3, 9, 258, -30, 3, 4, 4 }, { 18, 3, 9, 283, -30, 2, 7, 4 }, { 19, 3, 9, 308, -40, 2, 7, 5 }, { 20, 3, 9, 333, -40, 2, 8, 5 }, { 21, 4, 10, 360, -50, 4, 4, 5 }, { 22, 5, 10, 400, -50, 4, 4, 6 }, { 23, 5, 10, 450, -60, 3, 6, 6 }, { 24, 5, 10, 500, -60, 2, 10, 6 }, { 25, 5, 10, 550, -70, 2, 10, 7 }, { 26, 5, 10, 600, -70, 3, 7, 7 }, { 27, 5, 10, 650, -80, 5, 4, 7 }, { 28, 6, 12, 703, -80, 2, 12, 8 }, { 29, 6, 12, 778, -90, 2, 12, 8 }, { 30, 6, 12, 853, -90, 4, 6, 8 }, { 31, 6, 12, 928, -100, 4, 6, 9 }, { 32, 10, 10, 1000, -100, 6, 4, 9 }, { 33, 10, 10, 1100, -110, 6, 4, 10 }, { 34, 10, 10, 1200, -110, 4, 7, 10 }, { 35, 10, 10, 1300, -110, 4, 7, 11 }, { 36, 10, 10, 1400, -120, 3, 10, 11 }, { 37, 10, 10, 1500, -120, 3, 10, 12 }, { 38, 10, 10, 1600, -130, 5, 6, 12 }, { 39, 15, 10, 1700, -130, 5, 6, 13 }, { 40, 15, 10, 1850, -130, 4, 8, 13 }, { 41, 25, 10, 2000, -140, 4, 8, 14 }, { 42, 25, 10, 2250, -140, 3, 12, 14 }, { 43, 25, 10, 2500, -150, 3, 12, 15 }, { 44, 25, 10, 2750, -150, 8, 4, 15 }, { 45, 25, 10, 3000, -150, 8, 4, 16 }, { 46, 25, 10, 3250, -160, 6, 6, 16 }, { 47, 25, 10, 3500, -170, 6, 6, 17 }, { 48, 25, 10, 3750, -180, 6, 6, 18 }, { 49, 50, 10, 4000, -190, 4, 10, 18 }, { 50, 50, 10, 4500, -200, 5, 8, 19 }, { 51, 50, 10, 5000, -210, 5, 8, 20 }, { 52, 50, 10, 5500, -220, 6, 7, 20 }, { 53, 50, 10, 6000, -230, 6, 7, 21 }, { 54, 50, 10, 6500, -240, 7, 6, 22 }, { 55, 50, 10, 7000, -250, 10, 4, 23 }, { 56, 50, 10, 7500, -260, 10, 4, 24 }, { 57, 50, 10, 8000, -270, 6, 8, 24 }, { 58, 50, 10, 8500, -280, 5, 10, 25 }, { 59, 50, 10, 9000, -290, 8, 6, 26 }, { 60, 50, 10, 9500, -300, 8, 6, 28 } }; ///////////////////////////////////////////////////////////////////////////// // CMobEd dialog CMobEd::CMobEd(CWnd* pParent /*=NULL*/) : CDialog(CMobEd::IDD, pParent) { //{{AFX_DATA_INIT(CMobEd) m_Description = _T(""); m_LongDescr = _T(""); m_Name = _T(""); m_ShortDescr = _T(""); m_Vnum = 0; m_Alignment = 0; m_Group = 0; m_HitRoll = 0; m_Level = 0; m_DamDBonus = 0; m_DamDNumber = 0; m_DamDType = 0; m_HitDBonus = 0; m_HitDNumber = 0; m_HitDType = 0; m_ManaDBonus = 0; m_ManaDNumber = 0; m_ManaDType = 0; m_AcBash = 0; m_AcExotic = 0; m_AcPierce = 0; m_AcSlash = 0; m_Wealth = 0; m_Material = _T(""); m_SpecFun = _T(""); //}}AFX_DATA_INIT m_seldamtype = ""; m_off_flags = 0; m_imm_flags = 0; m_res_flags = 0; m_vuln_flags = 0; m_form_flags = 0; m_parts_flags = 0; m_start_pos = ""; m_default_pos = ""; m_sex = ""; m_size = ""; m_shopdata = NULL; m_index = -1; m_doc = NULL; m_selrace = ""; m_act_flags = 0; m_aff_flags = 0; m_imagelist.Create( 16, 16, ILC_COLOR, 2, 1 ); m_imagelist.SetBkColor( RGB( 255, 255, 255 ) ); m_imagelist.Add( AfxGetApp()->LoadIcon( IDI_OFF ) ); m_imagelist.Add( AfxGetApp()->LoadIcon( IDI_ON ) ); m_accel = LoadAccelerators( AfxGetInstanceHandle(), MAKEINTRESOURCE( IDR_MOBED_ACC ) ); } CMobEd::~CMobEd() { if ( m_shopdata != NULL ) delete m_shopdata; } void CMobEd::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMobEd) DDX_Control(pDX, IDC_MOBED_MOBPROG_UP, m_MobProgUp); DDX_Control(pDX, IDC_MOBED_MOBPROG_DOWN, m_MobProgDown); DDX_Control(pDX, IDC_MOBED_MOBPROG, m_MobProgs); DDX_Control(pDX, IDC_MOBED_SHOPEDIT, m_ShopEdit); DDX_Control(pDX, IDC_MOBED_SHOPDEL, m_ShopDel); DDX_Control(pDX, IDC_MOBED_STARTPOS, m_StartPos); DDX_Control(pDX, IDC_MOBED_SIZE, m_Size); DDX_Control(pDX, IDC_MOBED_SEX, m_Sex); DDX_Control(pDX, IDC_MOBED_DEFAULTPOS, m_DefaultPos); DDX_Control(pDX, IDC_MOBED_WEALTH_SPIN, m_WealthSpin); DDX_Control(pDX, IDC_MOBED_VULN, m_FlagsVuln); DDX_Control(pDX, IDC_MOBED_RES, m_FlagsRes); DDX_Control(pDX, IDC_MOBED_PARTS, m_FlagsParts); DDX_Control(pDX, IDC_MOBED_OFF, m_FlagsOff); DDX_Control(pDX, IDC_MOBED_IMM, m_FlagsImm); DDX_Control(pDX, IDC_MOBED_FORM, m_FlagsForm); DDX_Control(pDX, IDC_MOBED_AFFECT, m_FlagsAffect); DDX_Control(pDX, IDC_MOBED_ACT, m_FlagsAct); DDX_Control(pDX, IDC_MOBED_FLAGS, m_Flags); DDX_Control(pDX, IDC_MOBED_ACSLASH_SPIN, m_AcSlashSpin); DDX_Control(pDX, IDC_MOBED_ACPIERCE_SPIN, m_AcPierceSpin); DDX_Control(pDX, IDC_MOBED_ACEXOTIC_SPIN, m_AcExoticSpin); DDX_Control(pDX, IDC_MOBED_ACBASH_SPIN, m_AcBashSpin); DDX_Control(pDX, IDC_MOBED_DAMTYPE, m_DamType); DDX_Control(pDX, IDC_MOBED_MANA_DBONUS_SPIN, m_ManaDBonusSpin); DDX_Control(pDX, IDC_MOBED_MANA_DTYPE_SPIN, m_ManaDTypeSpin); DDX_Control(pDX, IDC_MOBED_MANA_DNUMBER_SPIN, m_ManaDNumberSpin); DDX_Control(pDX, IDC_MOBED_HIT_DTYPE_SPIN, m_HitDTypeSpin); DDX_Control(pDX, IDC_MOBED_HIT_DNUMBER_SPIN, m_HitDNumberSpin); DDX_Control(pDX, IDC_MOBED_HIT_DBONUS_SPIN, m_HitDBonusSpin); DDX_Control(pDX, IDC_MOBED_DAMAGE_DTYPE_SPIN, m_DamDTypeSpin); DDX_Control(pDX, IDC_MOBED_DAMAGE_DNUMBER_SPIN, m_DamDNumberSpin); DDX_Control(pDX, IDC_MOBED_DAMAGE_DBONUS_SPIN, m_DamDBonusSpin); DDX_Control(pDX, IDC_MOBED_LEVEL_SPIN, m_LevelSpin); DDX_Control(pDX, IDC_MOBED_HITROLL_SPIN, m_HitRollSpin); DDX_Control(pDX, IDC_MOBED_GROUP_SPIN, m_GroupSpin); DDX_Control(pDX, IDC_MOBED_ALIGNMENT_SPIN, m_AlignmentSpin); DDX_Control(pDX, IDC_MOBED_RACE, m_Race); DDX_Control(pDX, IDC_MOBED_VNUM_SPIN, m_VnumSpin); DDX_Text(pDX, IDC_MOBED_DESCRIPTION, m_Description); DDX_Text(pDX, IDC_MOBED_LONGDESCR, m_LongDescr); DDX_Text(pDX, IDC_MOBED_NAME, m_Name); DDX_Text(pDX, IDC_MOBED_SHORTDESCR, m_ShortDescr); DDX_Text(pDX, IDC_MOBED_VNUM, m_Vnum); DDV_MinMaxInt(pDX, m_Vnum, 0, 32767); DDX_Text(pDX, IDC_MOBED_ALIGNMENT, m_Alignment); DDV_MinMaxInt(pDX, m_Alignment, -1000, 1000); DDX_Text(pDX, IDC_MOBED_GROUP, m_Group); DDV_MinMaxInt(pDX, m_Group, -1, 32767); DDX_Text(pDX, IDC_MOBED_HITROLL, m_HitRoll); DDV_MinMaxInt(pDX, m_HitRoll, 0, 32767); DDX_Text(pDX, IDC_MOBED_LEVEL, m_Level); DDV_MinMaxInt(pDX, m_Level, 0, 32767); DDX_Text(pDX, IDC_MOBED_DAMAGE_DBONUS, m_DamDBonus); DDV_MinMaxInt(pDX, m_DamDBonus, 0, 32767); DDX_Text(pDX, IDC_MOBED_DAMAGE_DNUMBER, m_DamDNumber); DDV_MinMaxInt(pDX, m_DamDNumber, 0, 32767); DDX_Text(pDX, IDC_MOBED_DAMAGE_DTYPE, m_DamDType); DDV_MinMaxInt(pDX, m_DamDType, 0, 32767); DDX_Text(pDX, IDC_MOBED_HIT_DBONUS, m_HitDBonus); DDV_MinMaxInt(pDX, m_HitDBonus, 0, 32767); DDX_Text(pDX, IDC_MOBED_HIT_DNUMBER, m_HitDNumber); DDV_MinMaxInt(pDX, m_HitDNumber, 0, 32767); DDX_Text(pDX, IDC_MOBED_HIT_DTYPE, m_HitDType); DDV_MinMaxInt(pDX, m_HitDType, 0, 32767); DDX_Text(pDX, IDC_MOBED_MANA_DBONUS, m_ManaDBonus); DDV_MinMaxInt(pDX, m_ManaDBonus, 0, 32767); DDX_Text(pDX, IDC_MOBED_MANA_DNUMBER, m_ManaDNumber); DDV_MinMaxInt(pDX, m_ManaDNumber, 0, 32767); DDX_Text(pDX, IDC_MOBED_MANA_DTYPE, m_ManaDType); DDV_MinMaxInt(pDX, m_ManaDType, 0, 32767); DDX_Text(pDX, IDC_MOBED_ACBASH, m_AcBash); DDV_MinMaxInt(pDX, m_AcBash, -32768, 32767); DDX_Text(pDX, IDC_MOBED_ACEXOTIC, m_AcExotic); DDV_MinMaxInt(pDX, m_AcExotic, -32768, 32767); DDX_Text(pDX, IDC_MOBED_ACPIERCE, m_AcPierce); DDV_MinMaxInt(pDX, m_AcPierce, -32768, 32767); DDX_Text(pDX, IDC_MOBED_ACSLASH, m_AcSlash); DDV_MinMaxInt(pDX, m_AcSlash, -32768, 32767); DDX_Text(pDX, IDC_MOBED_WEALTH, m_Wealth); DDV_MinMaxInt(pDX, m_Wealth, 0, 32767); DDX_Text(pDX, IDC_MOBED_MATERIAL, m_Material); DDX_Text(pDX, IDC_MOBED_SPECFUN, m_SpecFun); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMobEd, CDialog) //{{AFX_MSG_MAP(CMobEd) ON_CBN_SELCHANGE(IDC_MOBED_RACE, OnSelchangeMobedRace) ON_CBN_SELCHANGE(IDC_MOBED_DAMTYPE, OnSelchangeMobedDamtype) ON_BN_CLICKED(IDC_MOBED_ACT, OnMobedFlags) ON_NOTIFY(NM_CLICK, IDC_MOBED_FLAGS, OnClickMobedFlags) ON_CBN_SELCHANGE(IDC_MOBED_STARTPOS, OnSelchangeMobedStartpos) ON_CBN_SELCHANGE(IDC_MOBED_DEFAULTPOS, OnSelchangeMobedDefaultpos) ON_CBN_SELCHANGE(IDC_MOBED_SEX, OnSelchangeMobedSex) ON_CBN_SELCHANGE(IDC_MOBED_SIZE, OnSelchangeMobedSize) ON_BN_CLICKED(IDC_MOBED_SHOPDEL, OnMobedShopdel) ON_BN_CLICKED(IDC_MOBED_SHOPEDIT, OnMobedShopedit) ON_NOTIFY(NM_RCLICK, IDC_MOBED_MOBPROG, OnRclickMobedMobprog) ON_BN_CLICKED(IDC_MOBED_MERCEDIT, OnMobedMercedit) ON_BN_CLICKED(IDC_MOBED_DEFAULT, OnMobedDefault) ON_NOTIFY(NM_CLICK, IDC_MOBED_MOBPROG, OnClickMobedMobprog) ON_BN_CLICKED(IDC_MOBED_MOBPROG_UP, OnMobedMobprogUp) ON_BN_CLICKED(IDC_MOBED_MOBPROG_DOWN, OnMobedMobprogDown) ON_COMMAND(ID_EDIT_COPIARMOB, OnEditCopiarmob) ON_COMMAND(ID_EDIT_PEGARMOB, OnEditPegarmob) ON_BN_CLICKED(IDC_MOBED_AFFECT, OnMobedFlags) ON_BN_CLICKED(IDC_MOBED_FORM, OnMobedFlags) ON_BN_CLICKED(IDC_MOBED_IMM, OnMobedFlags) ON_BN_CLICKED(IDC_MOBED_OFF, OnMobedFlags) ON_BN_CLICKED(IDC_MOBED_PARTS, OnMobedFlags) ON_BN_CLICKED(IDC_MOBED_RES, OnMobedFlags) ON_BN_CLICKED(IDC_MOBED_VULN, OnMobedFlags) ON_BN_CLICKED(IDC_MOBED_TRAINER, OnMobedTrainer) //}}AFX_MSG_MAP ON_COMMAND( ID_MOBPROGPOP_AGREGAR, OnMobprogPopAgregar ) ON_COMMAND( ID_MOBPROGPOP_BORRAR, OnMobprogPopBorrar ) ON_COMMAND( ID_MOBPROGPOP_EDITAR, OnMobprogPopEditar ) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMobEd message handlers BOOL CMobEd::OnInitDialog() { CDialog::OnInitDialog(); int i, j, index; LV_COLUMN column; m_VnumSpin.SetBuddy( GetDlgItem( IDC_MOBED_VNUM ) ); m_VnumSpin.SetRange( 0, 32767 ); for ( i = 0; i < tables.m_mobflags.GetSize(); i++ ) { index = m_Race.AddString( tables.m_mobflags[i]->m_race ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Race.SetItemData( index, i ); } m_Race.SetCurSel( m_Race.FindStringExact( -1, m_selrace ) ); m_Flags.SetImageList( &m_imagelist, LVSIL_SMALL ); m_FlagsAct.SetCheck( 1 ); m_FlagsAffect.SetCheck( 0 ); m_FlagsOff.SetCheck( 0 ); m_FlagsImm.SetCheck( 0 ); m_FlagsRes.SetCheck( 0 ); m_FlagsVuln.SetCheck( 0 ); m_FlagsForm.SetCheck( 0 ); m_FlagsParts.SetCheck( 0 ); SetFlags(); m_AlignmentSpin.SetBuddy( GetDlgItem( IDC_MOBED_ALIGNMENT ) ); m_AlignmentSpin.SetRange( -1000, 1000 ); m_GroupSpin.SetBuddy( GetDlgItem( IDC_MOBED_GROUP ) ); m_GroupSpin.SetRange( -1, 32767 ); m_LevelSpin.SetBuddy( GetDlgItem( IDC_MOBED_LEVEL ) ); m_LevelSpin.SetRange( 0, 32767 ); m_HitRollSpin.SetBuddy( GetDlgItem( IDC_MOBED_HITROLL ) ); m_HitRollSpin.SetRange( 0, 32767 ); m_HitDNumberSpin.SetBuddy( GetDlgItem( IDC_MOBED_HIT_DNUMBER ) ); m_HitDTypeSpin.SetBuddy( GetDlgItem( IDC_MOBED_HIT_DTYPE ) ); m_HitDBonusSpin.SetBuddy( GetDlgItem( IDC_MOBED_HIT_DBONUS ) ); m_ManaDNumberSpin.SetBuddy( GetDlgItem( IDC_MOBED_MANA_DNUMBER ) ); m_ManaDTypeSpin.SetBuddy( GetDlgItem( IDC_MOBED_MANA_DTYPE ) ); m_ManaDBonusSpin.SetBuddy( GetDlgItem( IDC_MOBED_MANA_DBONUS ) ); m_DamDNumberSpin.SetBuddy( GetDlgItem( IDC_MOBED_DAMAGE_DNUMBER ) ); m_DamDTypeSpin.SetBuddy( GetDlgItem( IDC_MOBED_DAMAGE_DTYPE ) ); m_DamDBonusSpin.SetBuddy( GetDlgItem( IDC_MOBED_DAMAGE_DBONUS ) ); m_HitDNumberSpin.SetRange( 0, 32767 ); m_HitDTypeSpin.SetRange( 0, 32767 ); m_HitDBonusSpin.SetRange( 0, 32767 ); m_ManaDNumberSpin.SetRange( 0, 32767 ); m_ManaDTypeSpin.SetRange( 0, 32767 ); m_ManaDBonusSpin.SetRange( 0, 32767 ); m_DamDNumberSpin.SetRange( 0, 32767 ); m_DamDTypeSpin.SetRange( 0, 32767 ); m_DamDBonusSpin.SetRange( 0, 32767 ); m_AcPierceSpin.SetBuddy( GetDlgItem( IDC_MOBED_ACPIERCE ) ); m_AcBashSpin.SetBuddy( GetDlgItem( IDC_MOBED_ACBASH ) ); m_AcSlashSpin.SetBuddy( GetDlgItem( IDC_MOBED_ACSLASH ) ); m_AcExoticSpin.SetBuddy( GetDlgItem( IDC_MOBED_ACEXOTIC ) ); m_AcPierceSpin.SetRange( -32768, 32767 ); m_AcBashSpin.SetRange( -32768, 32767 ); m_AcSlashSpin.SetRange( -32768, 32767 ); m_AcExoticSpin.SetRange( -32768, 32767 ); for ( i = 0; i < tables.m_attack_types.GetSize(); i++ ) { index = m_DamType.AddString( tables.m_attack_types[i]->m_show ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_DamType.SetItemData( index, i ); if ( tables.m_attack_types[i]->m_text == m_seldamtype ) m_DamType.SetCurSel( index ); } for ( i = 0; i < tables.m_pos.GetSize(); i++ ) { index = m_StartPos.AddString( tables.m_pos[i]->m_show ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_StartPos.SetItemData( index, i ); if ( tables.m_pos[i]->m_text == m_start_pos ) m_StartPos.SetCurSel( index ); } for ( i = 0; i < tables.m_pos.GetSize(); i++ ) { index = m_DefaultPos.AddString( tables.m_pos[i]->m_show ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_DefaultPos.SetItemData( index, i ); if ( tables.m_pos[i]->m_text == m_default_pos ) m_DefaultPos.SetCurSel( index ); } for ( i = 0; i < tables.m_sex.GetSize(); i++ ) { index = m_Sex.AddString( tables.m_sex[i]->m_text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Sex.SetItemData( index, i ); } m_Sex.SetCurSel( m_Sex.FindStringExact( -1, m_sex ) ); m_WealthSpin.SetBuddy( GetDlgItem( IDC_MOBED_WEALTH ) ); m_WealthSpin.SetRange( 0, 32767 ); for ( i = 0; i < tables.m_size.GetSize(); i++ ) { index = m_Size.AddString( tables.m_size[i]->m_text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Size.SetItemData( index, i ); } m_Size.SetCurSel( m_Size.FindStringExact( -1, m_size ) ); if ( m_shopdata == NULL ) { m_ShopDel.EnableWindow( FALSE ); CString temp; temp.LoadString( IDS_NEW ); m_ShopEdit.SetWindowText( temp ); } CString temp; temp.LoadString( IDS_TYPE ); column.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; column.pszText = temp.GetBuffer(0); column.cx = 90; column.iSubItem = 0; m_MobProgs.InsertColumn( 0, &column ); temp.LoadString( IDS_VNUM ); column.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; column.pszText = temp.GetBuffer(0); column.cx = 60; column.iSubItem = 1; m_MobProgs.InsertColumn( 1, &column ); temp.LoadString( IDS_ARGUMENT ); column.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; column.pszText = temp.GetBuffer(0); column.cx = 300; column.iSubItem = 2; m_MobProgs.InsertColumn( 2, &column ); MakeMobprogList(); for ( i = 0; i < tables.m_skills.GetSize(); i++ ) { for ( j = 0; j < m_skills.GetSize(); j++ ) if ( tables.m_skills[i]->m_text == m_skills[j]->m_skill ) break; if ( j >= m_skills.GetSize() ) { CSkillData *skill = new CSkillData(); skill->m_skill = tables.m_skills[i]->m_text; skill->m_percent = 0; m_skills.Add( skill ); } } m_MobProgUp.SetIcon( AfxGetApp()->LoadIcon( IDI_UP ) ); m_MobProgDown.SetIcon( AfxGetApp()->LoadIcon( IDI_DOWN ) ); m_MobProgDown.EnableWindow( FALSE ); m_MobProgUp.EnableWindow( FALSE ); UpdateData( FALSE ); if ( tables.m_mudtype != MUD_ARCANUM ) { GetDlgItem( IDC_MOBED_MERCEDIT )->EnableWindow( FALSE ); GetDlgItem( IDC_MOBED_TRAINER )->EnableWindow( FALSE ); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CMobEd::OnSelchangeMobedRace() { int index, num; if ( ( index = m_Race.GetCurSel() ) == CB_ERR ) return; num = m_Race.GetItemData( index ); m_selrace = tables.m_mobflags[num]->m_race; m_act_flags = tables.m_mobflags[num]->m_act; m_aff_flags = tables.m_mobflags[num]->m_aff; m_off_flags = tables.m_mobflags[num]->m_off; m_imm_flags = tables.m_mobflags[num]->m_imm; m_res_flags = tables.m_mobflags[num]->m_res; m_vuln_flags = tables.m_mobflags[num]->m_vul; m_form_flags = tables.m_mobflags[num]->m_for; m_parts_flags = tables.m_mobflags[num]->m_par; SetFlags(); } void CMobEd::SetFlags() { int i; LV_ITEM itemdata; CArray< CNumStrData*, CNumStrData* > *table; int flagsel, tempflag; if ( m_FlagsAct.GetCheck() ) flagsel = 0; else if ( m_FlagsAffect.GetCheck() ) flagsel = 1; else if ( m_FlagsOff.GetCheck() ) flagsel = 2; else if ( m_FlagsImm.GetCheck() ) flagsel = 3; else if ( m_FlagsRes.GetCheck() ) flagsel = 4; else if ( m_FlagsVuln.GetCheck() ) flagsel = 5; else if ( m_FlagsForm.GetCheck() ) flagsel = 6; else if ( m_FlagsParts.GetCheck() ) flagsel = 7; else return; switch ( flagsel ) { case 0: table = &tables.m_act_flags; tempflag = m_act_flags; break; case 1: table = &tables.m_affect_flags; tempflag = m_aff_flags; break; case 2: table = &tables.m_off_flags; tempflag = m_off_flags; break; case 3: table = &tables.m_imm_flags; tempflag = m_imm_flags; break; case 4: table = &tables.m_imm_flags; tempflag = m_res_flags; break; case 5: table = &tables.m_imm_flags; tempflag = m_vuln_flags; break; case 6: table = &tables.m_form_flags; tempflag = m_form_flags; break; case 7: table = &tables.m_parts_flags; tempflag = m_parts_flags; break; } m_Flags.DeleteAllItems(); for ( i = 0; i < table->GetSize(); i++ ) { itemdata.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE; itemdata.iItem = i; itemdata.iSubItem = 0; itemdata.pszText = (*table)[i]->m_text.GetBuffer(0); itemdata.lParam = (*table)[i]->m_num; itemdata.iImage = itemdata.lParam & tempflag ? 1 : 0; m_Flags.InsertItem( &itemdata ); } } void CMobEd::OnOK() { char buf[500]; int i; CString text, tit; UpdateData( TRUE ); m_act_flags |= 1; if ( m_Vnum < m_doc->m_minvnum || m_Vnum > m_doc->m_maxvnum ) { text.LoadString( IDS_VNUMRANGE ); tit.LoadString( IDS_ERROR ); sprintf( buf, text, m_doc->m_minvnum, m_doc->m_maxvnum ); MessageBox( buf, tit, MB_ICONERROR ); GotoDlgCtrl( GetDlgItem( IDC_MOBED_VNUM ) ); return; } if ( m_doc->FindMob( m_Vnum, m_index ) != -1 ) { text.LoadString( IDS_VNUMUSE ); tit.LoadString( IDS_ERROR ); MessageBox( text, tit, MB_ICONERROR ); GotoDlgCtrl( GetDlgItem( IDC_MOBED_VNUM ) ); return; } if ( ( m_Group < m_doc->m_minvnum || m_Group > m_doc->m_maxvnum ) && m_Group > 0 ) { text.LoadString( IDS_GROUPUSE ); tit.LoadString( IDS_ERROR ); sprintf( buf, text, m_doc->m_minvnum, m_doc->m_maxvnum ); MessageBox( buf, tit, MB_ICONERROR ); GotoDlgCtrl( GetDlgItem( IDC_MOBED_GROUP ) ); return; } if ( m_selrace == "" ) { text.LoadString( IDS_MOBRACE ); tit.LoadString( IDS_ERROR ); MessageBox( text, tit, MB_ICONERROR ); GotoDlgCtrl( GetDlgItem( IDC_MOBED_RACE ) ); return; } if ( m_Name == "" ) { text.LoadString( IDS_MOBNAME ); tit.LoadString( IDS_ERROR ); MessageBox( text, tit, MB_ICONERROR ); GotoDlgCtrl( GetDlgItem( IDC_MOBED_NAME ) ); return; } for ( i = 0; i < m_skills.GetSize(); i++ ) if ( m_skills[i]->m_percent == 0 ) m_skills.RemoveAt( i-- ); UpdateData( FALSE ); CDialog::OnOK(); } void CMobEd::OnSelchangeMobedDamtype() { int index, num; if ( ( index = m_DamType.GetCurSel() ) == CB_ERR ) return; num = m_DamType.GetItemData( index ); m_seldamtype = tables.m_attack_types[num]->m_text; } void CMobEd::OnMobedFlags() { CButton *boton; if ( ( boton = (CButton*) GetFocus() ) == NULL ) return; if ( !boton->GetCheck() ) { boton->SetCheck( 1 ); return; } m_FlagsAct.SetCheck( 0 ); m_FlagsAffect.SetCheck( 0 ); m_FlagsOff.SetCheck( 0 ); m_FlagsImm.SetCheck( 0 ); m_FlagsRes.SetCheck( 0 ); m_FlagsVuln.SetCheck( 0 ); m_FlagsForm.SetCheck( 0 ); m_FlagsParts.SetCheck( 0 ); boton->SetCheck( 1 ); SetFlags(); } void CMobEd::OnClickMobedFlags(NMHDR* pNMHDR, LRESULT* pResult) { int *flags; if ( m_FlagsAct.GetCheck() ) flags = &m_act_flags; else if ( m_FlagsAffect.GetCheck() ) flags = &m_aff_flags; else if ( m_FlagsOff.GetCheck() ) flags = &m_off_flags; else if ( m_FlagsImm.GetCheck() ) flags = &m_imm_flags; else if ( m_FlagsRes.GetCheck() ) flags = &m_res_flags; else if ( m_FlagsVuln.GetCheck() ) flags = &m_vuln_flags; else if ( m_FlagsForm.GetCheck() ) flags = &m_form_flags; else if ( m_FlagsParts.GetCheck() ) flags = &m_parts_flags; else return; for ( int i = 0; i < m_Flags.GetItemCount(); i++ ) { if ( m_Flags.GetItemState( i, LVIS_SELECTED ) ) { *flags ^= m_Flags.GetItemData( i ); LV_ITEM itemdata; itemdata.mask = LVIF_IMAGE; itemdata.iItem = i; itemdata.iSubItem = 0; itemdata.iImage = *flags & m_Flags.GetItemData( i ) ? 1 : 0; m_Flags.SetItem( &itemdata ); } } *pResult = 0; } void CMobEd::OnSelchangeMobedStartpos() { int index, num; if ( ( index = m_StartPos.GetCurSel() ) == CB_ERR ) return; num = m_StartPos.GetItemData( index ); m_start_pos = tables.m_pos[num]->m_text; } void CMobEd::OnSelchangeMobedDefaultpos() { int index, num; if ( ( index = m_DefaultPos.GetCurSel() ) == CB_ERR ) return; num = m_DefaultPos.GetItemData( index ); m_default_pos = tables.m_pos[num]->m_text; } void CMobEd::OnSelchangeMobedSex() { int index, num; if ( ( index = m_Sex.GetCurSel() ) == CB_ERR ) return; num = m_Sex.GetItemData( index ); m_sex = tables.m_sex[num]->m_text; } void CMobEd::OnSelchangeMobedSize() { int index, num; if ( ( index = m_Size.GetCurSel() ) == CB_ERR ) return; num = m_Size.GetItemData( index ); m_size = tables.m_size[num]->m_text; } void CMobEd::OnMobedShopdel() { CString text; m_ShopDel.EnableWindow( FALSE ); text.LoadString( IDS_NEW ); m_ShopEdit.SetWindowText( text ); if ( m_shopdata == NULL ) return; delete m_shopdata; m_shopdata = NULL; } void CMobEd::OnMobedShopedit() { CShopEd dlg; int i; CString text; if ( m_shopdata == NULL ) { m_ShopDel.EnableWindow( TRUE ); text.LoadString( IDS_EDIT ); m_ShopEdit.SetWindowText( text ); m_shopdata = new CShopData(); } for ( i = 0; i < 5; i++ ) dlg.m_trade[i] = m_shopdata->m_trade[i]; dlg.m_Buy = m_shopdata->m_percent_buy; dlg.m_Sell = m_shopdata->m_percent_sell; dlg.m_Open = m_shopdata->m_open_hour; dlg.m_Close = m_shopdata->m_close_hour; if ( dlg.DoModal() == IDOK ) { for ( i = 0; i < 5; i++ ) m_shopdata->m_trade[i] = dlg.m_trade[i]; m_shopdata->m_percent_buy = dlg.m_Buy; m_shopdata->m_percent_sell = dlg.m_Sell; m_shopdata->m_open_hour = dlg.m_Open; m_shopdata->m_close_hour = dlg.m_Close; } } void CMobEd::MakeMobprogList() { int i, index; char buf[500]; m_MobProgs.DeleteAllItems(); if ( !tables.m_mobprog ) { m_MobProgs.EnableWindow( FALSE ); return; } for ( i = 0; i < m_mobprog.GetSize(); i++ ) { index = m_MobProgs.InsertItem( i, m_mobprog[i]->m_type ); itoa( m_mobprog[i]->m_vnum, buf, 10 ); m_MobProgs.SetItemText( index, 1, buf ); m_MobProgs.SetItemText( index, 2, m_mobprog[i]->m_trigphrase ); m_MobProgs.SetItemData( index, i ); } } void CMobEd::OnRclickMobedMobprog(NMHDR* pNMHDR, LRESULT* pResult) { POINT curPos; CMenu menu; int i; CString text; for ( i = 0; i < m_MobProgs.GetItemCount(); i++ ) if ( m_MobProgs.GetItemState( i, LVIS_SELECTED ) ) break; GetCursorPos( &curPos ); menu.CreatePopupMenu(); text.LoadString( IDS_MADD ); menu.AppendMenu( MF_ENABLED, ID_MOBPROGPOP_AGREGAR, text ); text.LoadString( IDS_MDEL ); menu.AppendMenu( i < m_MobProgs.GetItemCount() ? MF_ENABLED : MF_GRAYED, ID_MOBPROGPOP_BORRAR, text ); text.LoadString( IDS_MEDIT ); menu.AppendMenu( i < m_MobProgs.GetItemCount() ? MF_ENABLED : MF_GRAYED, ID_MOBPROGPOP_EDITAR, text ); menu.TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON, curPos.x, curPos.y, this ); *pResult = 0; } int CMobEd::MobProgEd( CMobProg *mobprog ) { CMobProgEd dlg; dlg.m_seltype = mobprog->m_type; dlg.m_Vnum = mobprog->m_vnum; dlg.m_Trigphrase = mobprog->m_trigphrase; if ( dlg.DoModal() == IDOK ) { mobprog->m_type = dlg.m_seltype; mobprog->m_vnum = dlg.m_Vnum; mobprog->m_trigphrase = dlg.m_Trigphrase; return IDOK; } return IDCANCEL; } void CMobEd::OnMobprogPopAgregar() { CMobProg *mobprog; mobprog = new CMobProg(); if ( MobProgEd( mobprog ) == IDOK ) { m_mobprog.Add( mobprog ); MakeMobprogList(); } else delete mobprog; } void CMobEd::OnMobprogPopBorrar() { int i; for ( i = 0; i < m_MobProgs.GetItemCount(); i++ ) if ( m_MobProgs.GetItemState( i, LVIS_SELECTED ) ) break; if ( i >= m_MobProgs.GetItemCount() ) return; m_mobprog.RemoveAt( m_MobProgs.GetItemData( i ) ); MakeMobprogList(); } void CMobEd::OnMobprogPopEditar() { int i; for ( i = 0; i < m_MobProgs.GetItemCount(); i++ ) if ( m_MobProgs.GetItemState( i, LVIS_SELECTED ) ) break; if ( i >= m_MobProgs.GetItemCount() ) return; if ( MobProgEd( m_mobprog[m_MobProgs.GetItemData( i )] ) == IDOK ) MakeMobprogList(); } void CMobEd::OnMobedMercedit() { CMercDataEd dlg; int i; CSkillData *skill; dlg.m_Clan = m_clan; dlg.m_Rank = m_rank; for ( i = 0; i < m_mercmsg.GetSize(); i++ ) dlg.m_mercmsg.Add( m_mercmsg[i] ); for ( i = 0; i < m_skills.GetSize(); i++ ) { skill = new CSkillData(); *skill = *m_skills[i]; dlg.m_skills.Add( skill ); } if ( dlg.DoModal() == IDOK ) { m_clan = dlg.m_Clan; m_rank = dlg.m_Rank; m_mercmsg.RemoveAll(); for ( i = 0; i < dlg.m_mercmsg.GetSize(); i++ ) m_mercmsg.Add( dlg.m_mercmsg[i] ); m_skills.RemoveAll(); for ( i = 0; i < dlg.m_skills.GetSize(); i++ ) { skill = new CSkillData(); *skill = *dlg.m_skills[i]; m_skills.Add( skill ); } } } void CMobEd::OnMobedDefault() { UpdateData( TRUE ); //The following line of code is the one which determines //if the level they have entered is valid as to the //level table at the top of this document. This has been //modified for Angel's Fire to allow for 115 levels //as opposed to the previous 60 from the origional //Arcanum Edit if ( m_Level < 1 || m_Level > 115 ) return; m_HitDNumber = levmob[m_Level-1].hit_num; m_HitDType = levmob[m_Level-1].hit_type; m_HitDBonus = levmob[m_Level-1].hit_bonus; m_AcBash = levmob[m_Level-1].ac; m_AcExotic = levmob[m_Level-1].ac; m_AcPierce = levmob[m_Level-1].ac; m_AcSlash = levmob[m_Level-1].ac; m_DamDNumber = levmob[m_Level-1].dam_num; m_DamDType = levmob[m_Level-1].dam_type; m_DamDBonus = levmob[m_Level-1].dam_bonus; UpdateData( FALSE ); } void CMobEd::OnClickMobedMobprog(NMHDR* pNMHDR, LRESULT* pResult) { int i; m_MobProgDown.EnableWindow( FALSE ); m_MobProgUp.EnableWindow( FALSE ); for ( i = 0; i < m_MobProgs.GetItemCount(); i++ ) if ( m_MobProgs.GetItemState( i, LVIS_SELECTED ) ) break; if ( i < m_MobProgs.GetItemCount() - 1 ) m_MobProgDown.EnableWindow(); if ( i > 0 && i < m_MobProgs.GetItemCount() ) m_MobProgUp.EnableWindow(); *pResult = 0; } void CMobEd::OnMobedMobprogUp() { int i, k; char buf[500]; CMobProg *mobprog; for ( i = 0; i < m_MobProgs.GetItemCount(); i++ ) if ( m_MobProgs.GetItemState( i, LVIS_SELECTED ) ) break; if ( i >= m_MobProgs.GetItemCount() ) return; if ( i <= 0 ) return; mobprog = m_mobprog[i-1]; m_mobprog[i-1] = m_mobprog[i]; m_mobprog[i] = mobprog; for ( k = i-1; k <= i; k++ ) { m_MobProgs.DeleteItem( k ); int index = m_MobProgs.InsertItem( k, m_mobprog[k]->m_type ); itoa( m_mobprog[k]->m_vnum, buf, 10 ); m_MobProgs.SetItemText( index, 1, buf ); m_MobProgs.SetItemText( index, 2, m_mobprog[k]->m_trigphrase ); m_MobProgs.SetItemData( index, k ); } m_MobProgs.SetItemState( i-1, LVIS_SELECTED, LVIS_SELECTED ); m_MobProgs.EnsureVisible( --i, FALSE ); m_MobProgDown.EnableWindow( FALSE ); m_MobProgUp.EnableWindow( FALSE ); if ( i < m_MobProgs.GetItemCount() - 1 ) m_MobProgDown.EnableWindow(); if ( i > 0 && i < m_MobProgs.GetItemCount() ) m_MobProgUp.EnableWindow(); } void CMobEd::OnMobedMobprogDown() { int i, k; char buf[500]; CMobProg *mobprog; for ( i = 0; i < m_MobProgs.GetItemCount(); i++ ) if ( m_MobProgs.GetItemState( i, LVIS_SELECTED ) ) break; if ( i >= m_MobProgs.GetItemCount() - 1 ) return; mobprog = m_mobprog[i+1]; m_mobprog[i+1] = m_mobprog[i]; m_mobprog[i] = mobprog; for ( k = i; k <= i+1; k++ ) { m_MobProgs.DeleteItem( k ); int index = m_MobProgs.InsertItem( k, m_mobprog[k]->m_type ); itoa( m_mobprog[k]->m_vnum, buf, 10 ); m_MobProgs.SetItemText( index, 1, buf ); m_MobProgs.SetItemText( index, 2, m_mobprog[k]->m_trigphrase ); m_MobProgs.SetItemData( index, k ); } m_MobProgs.SetItemState( i+1, LVIS_SELECTED, LVIS_SELECTED ); m_MobProgs.EnsureVisible( ++i, FALSE ); m_MobProgDown.EnableWindow( FALSE ); m_MobProgUp.EnableWindow( FALSE ); if ( i < m_MobProgs.GetItemCount() - 1 ) m_MobProgDown.EnableWindow(); if ( i > 0 && i < m_MobProgs.GetItemCount() ) m_MobProgUp.EnableWindow(); } BOOL CMobEd::PreTranslateMessage(MSG* pMsg) { if ( TranslateAccelerator( this->m_hWnd, m_accel, pMsg ) ) return TRUE; return CDialog::PreTranslateMessage(pMsg); } void CMobEd::OnEditCopiarmob() { int i; UINT clfmt = RegisterClipboardFormat( "ARCAED_MOB" ); COleDataSource *source = new COleDataSource(); UpdateData( TRUE ); TRY { CSharedFile file( GMEM_ZEROINIT|GMEM_DDESHARE|GMEM_MOVEABLE ); TRY { CArchive ar (&file, CArchive::store); TRY { ar << m_AcBash << m_AcExotic << m_AcPierce; ar << m_AcSlash << m_act_flags << m_aff_flags; ar << m_Alignment << m_clan; ar << m_DamDBonus << m_DamDNumber << m_DamDType; ar << m_default_pos << m_Description; ar << m_form_flags << m_Group; ar << m_HitDBonus << m_HitDNumber << m_HitDType; ar << m_HitRoll << m_imm_flags << m_Level; ar << m_LongDescr; ar << m_ManaDBonus << m_ManaDNumber << m_ManaDType; ar << m_Material; ar << m_mercmsg.GetSize(); for ( i = 0; i < m_mercmsg.GetSize(); i++ ) { ar << m_mercmsg[i]; } ar << m_mobprog.GetSize(); for ( i = 0; i < m_mobprog.GetSize(); i++ ) { ar << m_mobprog[i]->m_trigphrase; ar << m_mobprog[i]->m_type; ar << m_mobprog[i]->m_vnum; } ar << m_Name << m_off_flags << m_parts_flags; ar << m_rank << m_res_flags << m_seldamtype; ar << m_selrace << m_sex; if ( m_shopdata != NULL ) { ar << 1; ar << m_shopdata->m_close_hour; ar << m_shopdata->m_open_hour; ar << m_shopdata->m_percent_buy; ar << m_shopdata->m_percent_sell; for ( i = 0; i < 5; i++ ) ar << m_shopdata->m_trade[i]; } else ar << 0; ar << m_size; ar << m_skills.GetSize(); for ( i = 0; i < m_skills.GetSize(); i++ ) { ar << m_skills[i]->m_percent; ar << m_skills[i]->m_skill; } ar << m_SpecFun << m_start_pos << m_vuln_flags; ar << m_Wealth << m_ShortDescr; ar.Close(); } CATCH_ALL( eArWrite ) { ASSERT( FALSE ); } END_CATCH_ALL; } CATCH_ALL( eArError ) { ASSERT( FALSE ); } END_CATCH_ALL; source->CacheGlobalData( clfmt, file.Detach() ); } CATCH_ALL( eShFileError ) { ASSERT( FALSE ); } END_CATCH_ALL; source->SetClipboard(); } void CMobEd::OnEditPegarmob() { int i, j, index, num; UINT clfmt = RegisterClipboardFormat( "ARCAED_MOB" ); COleDataObject source; if ( !source.AttachClipboard() ) return; CFile *pFile = source.GetFileData( clfmt ); if ( pFile == NULL ) return; UpdateData( TRUE ); TRY { CArchive ar( pFile, CArchive::load ); TRY { CMobProg *mobprog; CShopData *shop; CSkillData *skill; CString line; ar >> m_AcBash >> m_AcExotic >> m_AcPierce; ar >> m_AcSlash >> m_act_flags >> m_aff_flags; ar >> m_Alignment >> m_clan; ar >> m_DamDBonus >> m_DamDNumber >> m_DamDType; ar >> m_default_pos >> m_Description; ar >> m_form_flags >> m_Group; ar >> m_HitDBonus >> m_HitDNumber >> m_HitDType; ar >> m_HitRoll >> m_imm_flags >> m_Level; ar >> m_LongDescr; ar >> m_ManaDBonus >> m_ManaDNumber >> m_ManaDType; ar >> m_Material; ar >> num; m_mercmsg.RemoveAll(); for ( i = 0; i < num; i++ ) { ar >> line; m_mercmsg.Add( line ); } ar >> num; m_mobprog.RemoveAll(); for ( i = 0; i < num; i++ ) { mobprog = new CMobProg(); ar >> mobprog->m_trigphrase; ar >> mobprog->m_type; ar >> mobprog->m_vnum; m_mobprog.Add( mobprog ); } ar >> m_Name >> m_off_flags >> m_parts_flags; ar >> m_rank >> m_res_flags >> m_seldamtype; ar >> m_selrace >> m_sex; ar >> num; if ( m_shopdata != NULL ) { delete m_shopdata; m_shopdata = NULL; } if ( num ) { shop = new CShopData(); ar >> shop->m_close_hour; ar >> shop->m_open_hour; ar >> shop->m_percent_buy; ar >> shop->m_percent_sell; for ( i = 0; i < 5; i++ ) ar >> shop->m_trade[i]; m_shopdata = shop; } ar >> m_size; ar >> num; m_skills.RemoveAll(); for ( i = 0; i < num; i++ ) { skill = new CSkillData(); ar >> skill->m_percent; ar >> skill->m_skill; m_skills.Add( skill ); } ar >> m_SpecFun >> m_start_pos >> m_vuln_flags; ar >> m_Wealth >> m_ShortDescr; ar.Close(); } CATCH_ALL( eArRead ) { ASSERT( FALSE ); } END_CATCH_ALL; } CATCH_ALL( eArClose ) { ASSERT( FALSE ); } END_CATCH_ALL; UpdateData( FALSE ); m_Race.SetCurSel( m_Race.FindStringExact( -1, m_selrace ) ); m_FlagsAct.SetCheck( 1 ); m_FlagsAffect.SetCheck( 0 ); m_FlagsOff.SetCheck( 0 ); m_FlagsImm.SetCheck( 0 ); m_FlagsRes.SetCheck( 0 ); m_FlagsVuln.SetCheck( 0 ); m_FlagsForm.SetCheck( 0 ); m_FlagsParts.SetCheck( 0 ); SetFlags(); m_DamType.ResetContent(); for ( i = 0; i < tables.m_attack_types.GetSize(); i++ ) { index = m_DamType.AddString( tables.m_attack_types[i]->m_show ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_DamType.SetItemData( index, i ); if ( tables.m_attack_types[i]->m_text == m_seldamtype ) m_DamType.SetCurSel( index ); } m_StartPos.ResetContent(); for ( i = 0; i < tables.m_pos.GetSize(); i++ ) { index = m_StartPos.AddString( tables.m_pos[i]->m_show ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_StartPos.SetItemData( index, i ); if ( tables.m_pos[i]->m_text == m_start_pos ) m_StartPos.SetCurSel( index ); } m_DefaultPos.ResetContent(); for ( i = 0; i < tables.m_pos.GetSize(); i++ ) { index = m_DefaultPos.AddString( tables.m_pos[i]->m_show ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_DefaultPos.SetItemData( index, i ); if ( tables.m_pos[i]->m_text == m_default_pos ) m_DefaultPos.SetCurSel( index ); } m_Sex.ResetContent(); for ( i = 0; i < tables.m_sex.GetSize(); i++ ) { index = m_Sex.AddString( tables.m_sex[i]->m_text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Sex.SetItemData( index, i ); } m_Sex.SetCurSel( m_Sex.FindStringExact( -1, m_sex ) ); m_Size.ResetContent(); for ( i = 0; i < tables.m_size.GetSize(); i++ ) { index = m_Size.AddString( tables.m_size[i]->m_text ); ASSERT( index != CB_ERR && index != CB_ERRSPACE ); m_Size.SetItemData( index, i ); } m_Size.SetCurSel( m_Size.FindStringExact( -1, m_size ) ); if ( m_shopdata == NULL ) { m_ShopDel.EnableWindow( FALSE ); m_ShopEdit.SetWindowText( "Nuevo" ); } MakeMobprogList(); for ( i = 0; i < tables.m_skills.GetSize(); i++ ) { for ( j = 0; j < m_skills.GetSize(); j++ ) if ( tables.m_skills[i]->m_text == m_skills[j]->m_skill ) break; if ( j >= m_skills.GetSize() ) { CSkillData *skill = new CSkillData(); skill->m_skill = tables.m_skills[i]->m_text; skill->m_percent = 0; m_skills.Add( skill ); } } m_MobProgDown.EnableWindow( FALSE ); m_MobProgUp.EnableWindow( FALSE ); UpdateData( FALSE ); delete pFile; } void CMobEd::OnMobedTrainer() { CSkillTrEdit dlg; int i; CSkillPrac *prskill; for ( i = 0; i < m_trskill.GetSize(); i++ ) { prskill = new CSkillPrac; *prskill = *m_trskill[i]; dlg.m_trskill.Add( prskill ); } dlg.m_class = m_class; if ( dlg.DoModal() == IDOK ) { m_trskill.RemoveAll(); for ( i = 0; i < dlg.m_trskill.GetSize(); i++ ) { if ( dlg.m_trskill[i]->m_skill != "" ) { prskill = new CSkillPrac; *prskill = *dlg.m_trskill[i]; m_trskill.Add( prskill ); } } m_class = dlg.m_class; } }