• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當自強而不息

            Controlling Players and Characters(29)

             

            download source and project


            master character list edit source:


            #include <windows.h>
            #include <stdio.h>
            #include "resource.h"
            #include "master_struct.h"
            #include "tool.h"

            #pragma warning(disable : 4996)

            #define MAX_CHARACTERS  256

            HWND g_hwnd;

            OPENFILENAME g_ofn;         
            // open/save dialog data
            char g_mcl_file[MAX_PATH];  // filename for character file

            sCharDef g_chars[MAX_CHARACTERS];
            long g_edit_char;

            //////////////////////////////////////////////////////////////////////////////////////////////

            inline 
            void reset_character(sCharDef& char_def)
            {
                char_def.weapon    = -1;
                char_def.armor     = -1;
                char_def.shield    = -1;
                char_def.accessory = -1;
            }

            //////////////////////////////////////////////////////////////////////////////////////////////

            bool load_chars(const char* filename)
            {
                
            // load characters data from file and insert into listbox

                // clear char structures
                for(int i = 0; i < MAX_CHARACTERS; i++)
                {
                    ZeroMemory(&g_chars[i], 
            sizeof(sCharDef));

                    g_chars[i].weapon    = -1;
                    g_chars[i].armor     = -1;
                    g_chars[i].shield    = -1;
                    g_chars[i].accessory = -1;
                }

                FILE* fp;
                
            if((fp = fopen(filename, "rb")) == NULL)
                    
            return false;

                fread(g_chars, 1, 
            sizeof(g_chars), fp);
                fclose(fp);

                
            // update characters list box
                HWND listbox = GetDlgItem(g_hwnd, IDC_CHARACTERS);
                reset_listbox(listbox);

                
            for(int i = 0; i < MAX_CHARACTERS; i++)
                {
                    
            char text[256];
                    sprintf(text, "%5d: %s", i, g_chars[i].name);
                    add_string_to_listbox(listbox, text);
                }

                
            return true;
            }

            //////////////////////////////////////////////////////////////////////////////////////////////

            bool new_mcl()
            {
                
            if(MessageBox(g_hwnd, "Are you sure? (Looses any unsaved MCL information)", "New MCL", MB_YESNO) != IDYES)
                    
            return false;

                HWND listbox = GetDlgItem(g_hwnd, IDC_CHARACTERS); 
                reset_listbox(listbox);

                
            for(int i = 0; i < MAX_CHARACTERS; i++)
                {
                    ZeroMemory(&g_chars[i], 
            sizeof(sCharDef));
                    reset_character(g_chars[i]);

                    
            char buf[16];
                    sprintf(buf, "%5d:", i);
                    insert_string_to_listbox(listbox, i, buf);
                }

                
            return true;
            }

            //////////////////////////////////////////////////////////////////////////////////////////////

            bool load_mcl()
            {
                
            // Setup the open dialog info
                g_ofn.hwndOwner   = g_hwnd;
                g_ofn.lpstrFile   = g_mcl_file;
                g_ofn.lpstrTitle  = "Load MCL File";
                g_ofn.lpstrFilter = "MCL Character Files (*.MCL)\0*.MCL\0All Files (*.*)\0*.*\0\0";
                g_ofn.lpstrDefExt = "MCL";

                
            if(! GetOpenFileName(&g_ofn))
                    
            return false;

                
            if(! load_chars(g_mcl_file))
                {
                    MessageBox(g_hwnd, g_mcl_file, "Unable to open file.", MB_OK);
                    
            return false;
                }

                
            return true;
            }

            //////////////////////////////////////////////////////////////////////////////////////////////

            bool save_mcl()
            {
                
            // Setup the open dialog info
                g_ofn.hwndOwner   = g_hwnd;
                g_ofn.lpstrFile   = g_mcl_file;
                g_ofn.lpstrTitle  = "Save MCL File";
                g_ofn.lpstrFilter = "MCL Character Files (*.MCL)\0*.MCL\0All Files (*.*)\0*.*\0\0";
                g_ofn.lpstrDefExt = "MCL";

                
            if(! GetSaveFileName(&g_ofn))
                    
            return false;

                
            // open filename for saving
                FILE* fp;
                
            if((fp = fopen(g_mcl_file, "wb")) == NULL)
                    
            return false;

                fwrite(g_chars, 1, 
            sizeof(g_chars), fp);
                fclose(fp);

                
            return true;
            }

            //////////////////////////////////////////////////////////////////////////////////////////////

            void update_entry(HWND dlg, long char_index)
            {
                
            char text[32];

                sCharDef& char_def = g_chars[char_index];

                
            // get text entries
                GetWindowText(GetDlgItem(dlg, IDC_NAME), char_def.name, sizeof(char_def.name));
                GetWindowText(GetDlgItem(dlg, IDC_ITEM), char_def.item_filename, 
            sizeof(char_def.item_filename));

                
            // Get numerical entries

                GetWindowText(GetDlgItem(dlg, IDC_CLASS),      text, 
            sizeof(text));
                char_def.class_index = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_HEALTH),     text, 
            sizeof(text));
                char_def.health_points = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_MANA),       text, 
            sizeof(text));
                char_def.mana_points = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_LEVEL),      text, 
            sizeof(text));
                char_def.level = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_EXPERIENCE), text, 
            sizeof(text));
                char_def.exp = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_MONEY),      text, 
            sizeof(text));
                char_def.money = atol(text);

                
            ///////////////////////////////////////////

                GetWindowText(GetDlgItem(dlg, IDC_ATTACK),     text, 
            sizeof(text));
                char_def.attack = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_DEFENSE),    text, 
            sizeof(text));
                char_def.defense = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_AGILITY),    text, 
            sizeof(text));
                char_def.agility = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_RESISTANCE), text, 
            sizeof(text));
                char_def.resistance = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_MENTAL),     text, 
            sizeof(text));
                char_def.mental = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_TOHIT),      text, 
            sizeof(text));
                char_def.to_hit = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_SPEED),      text, 
            sizeof(text));
                char_def.speed = (
            float)atof(text);

                
            ///////////////////////////////////////////

                GetWindowText(GetDlgItem(dlg, IDC_RANGE),     text, 
            sizeof(text));
                char_def.attack_range = (
            float)atof(text);

                GetWindowText(GetDlgItem(dlg, IDC_CHARGE),     text, 
            sizeof(text));
                char_def.charge_rate = (
            float)atof(text);

                GetWindowText(GetDlgItem(dlg, IDC_TOATTACK),   text, 
            sizeof(text));
                char_def.to_attack = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_TOMAGIC),    text, 
            sizeof(text));
                char_def.to_magic = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_DROPITEM),   text, 
            sizeof(text));
                char_def.drop_item = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_TODROP),     text, 
            sizeof(text));
                char_def.drop_chance = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_TOEFFECT),   text, 
            sizeof(text));
                char_def.effect_chance = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_EFFECT),     text, 
            sizeof(text));
                char_def.effects = atol(text);

                
            ///////////////////////////////////////////

                GetWindowText(GetDlgItem(dlg, IDC_MESH),       text, 
            sizeof(text));
                char_def.mesh_index = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_WEAPON),     text, 
            sizeof(text));
                char_def.weapon = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_ARMOR),      text, 
            sizeof(text));
                char_def.armor = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_SHIELD),     text, 
            sizeof(text));
                char_def.shield = atol(text);

                GetWindowText(GetDlgItem(dlg, IDC_ACCESSORY),  text, 
            sizeof(text));
                char_def.accessory = atol(text);

                char_def.magic_spell[0] = 0;
                char_def.magic_spell[1] = 0;

                HWND spell_wnd = GetDlgItem(dlg, IDC_SPELLS);

                
            for(int i = 0; i < 64; i++)
                {
                    
            if(get_listbox_sel(spell_wnd, i))
                    {
                        
            if(i < 32)
                            char_def.magic_spell[0] |= (1 << i);
                        
            else
                            char_def.magic_spell[1] |= (1 << (i-32));
                    }
                }
            }

            //////////////////////////////////////////////////////////////////////////////////////////////

            BOOL CALLBACK modify_dialog_proc(HWND dlg, UINT msg, WPARAM word_param, LPARAM long_param)
            {
                
            char text[32];
                HWND spell_wnd;

                
            switch(msg)
                {
                
            case WM_INITDIALOG:
                {
                    
            // return an error if there is no character to modify
                    if(g_edit_char >= MAX_CHARACTERS)
                    {
                        EndDialog(dlg, FALSE);
                        
            return FALSE;
                    }

                    
            // display character number
                    sprintf(text, "%lu", g_edit_char);
                    SetWindowText(GetDlgItem(dlg, IDC_NUM), text);

                    sCharDef& char_def = g_chars[g_edit_char];

                    
            // display text entries
                    SetWindowText(GetDlgItem(dlg, IDC_NAME), char_def.name);
                    SetWindowText(GetDlgItem(dlg, IDC_ITEM), char_def.item_filename);

                    
            // display numerical entries
                    sprintf(text, "%lu", char_def.class_index);
                    SetWindowText(GetDlgItem(dlg, IDC_CLASS), text);
                    sprintf(text, "%lu", char_def.health_points);
                    SetWindowText(GetDlgItem(dlg, IDC_HEALTH), text);
                    sprintf(text, "%lu", char_def.mana_points);
                    SetWindowText(GetDlgItem(dlg, IDC_MANA), text);
                    sprintf(text, "%lu", char_def.level);
                    SetWindowText(GetDlgItem(dlg, IDC_LEVEL), text);
                    sprintf(text, "%lu", char_def.exp);
                    SetWindowText(GetDlgItem(dlg, IDC_EXPERIENCE), text);
                    sprintf(text, "%lu", char_def.money);
                    SetWindowText(GetDlgItem(dlg, IDC_MONEY), text);

                    sprintf(text, "%lu", char_def.attack);
                    SetWindowText(GetDlgItem(dlg, IDC_ATTACK), text);
                    sprintf(text, "%lu", char_def.defense);
                    SetWindowText(GetDlgItem(dlg, IDC_DEFENSE), text);
                    sprintf(text, "%lu", char_def.agility);
                    SetWindowText(GetDlgItem(dlg, IDC_AGILITY), text);
                    sprintf(text, "%lu", char_def.resistance);
                    SetWindowText(GetDlgItem(dlg, IDC_RESISTANCE), text);
                    sprintf(text, "%lu", char_def.mental);
                    SetWindowText(GetDlgItem(dlg, IDC_MENTAL), text);
                    sprintf(text, "%lu", char_def.to_hit);
                    SetWindowText(GetDlgItem(dlg, IDC_TOHIT), text);
                    sprintf(text, "%lf", char_def.speed);
                    SetWindowText(GetDlgItem(dlg, IDC_SPEED), text);

                    sprintf(text, "%lf", char_def.attack_range);
                    SetWindowText(GetDlgItem(dlg, IDC_RANGE), text);
                    sprintf(text, "%lf", char_def.charge_rate);
                    SetWindowText(GetDlgItem(dlg, IDC_CHARGE), text);
                    sprintf(text, "%lu", char_def.to_attack);
                    SetWindowText(GetDlgItem(dlg, IDC_TOATTACK), text);
                    sprintf(text, "%lu", char_def.to_magic);
                    SetWindowText(GetDlgItem(dlg, IDC_TOMAGIC), text);
                    sprintf(text, "%lu", char_def.drop_item);
                    SetWindowText(GetDlgItem(dlg, IDC_DROPITEM), text);
                    sprintf(text, "%lu", char_def.drop_chance);
                    SetWindowText(GetDlgItem(dlg, IDC_TODROP), text);
                    sprintf(text, "%lu", char_def.effect_chance);
                    SetWindowText(GetDlgItem(dlg, IDC_TOEFFECT), text);
                    sprintf(text, "%lu", char_def.effects);
                    SetWindowText(GetDlgItem(dlg, IDC_EFFECT), text);

                    sprintf(text, "%lu", char_def.mesh_index);
                    SetWindowText(GetDlgItem(dlg, IDC_MESH), text);
                    sprintf(text, "%ld", char_def.weapon);
                    SetWindowText(GetDlgItem(dlg, IDC_WEAPON), text);
                    sprintf(text, "%ld", char_def.armor);
                    SetWindowText(GetDlgItem(dlg, IDC_ARMOR), text);
                    sprintf(text, "%ld", char_def.shield);
                    SetWindowText(GetDlgItem(dlg, IDC_SHIELD), text);
                    sprintf(text, "%ld", char_def.accessory);
                    SetWindowText(GetDlgItem(dlg, IDC_ACCESSORY), text);

                    
            // display spell list

                    spell_wnd = GetDlgItem(dlg, IDC_SPELLS);
                    reset_listbox(spell_wnd);

                    
            for(int i = 0; i < 64; i++)
                    {
                        sprintf(text, "%d", i);
                        insert_string_to_listbox(spell_wnd, i, text);

                        
            if(i < 32)
                        {
                            
            if(char_def.magic_spell[0] & (1 << i))
                                set_listbox_sel(spell_wnd, TRUE, i);
                        }
                        
            else
                        {
                            
            if(char_def.magic_spell[1] & (1 << (i - 32)))
                                set_listbox_sel(spell_wnd, TRUE, i);
                        }
                    }

                    
            return TRUE;
                }

                
            case WM_COMMAND:
                    
            switch(LOWORD(word_param))
                    {
                    
            case IDC_OK:
                        update_entry(dlg, g_edit_char);
                        EndDialog(dlg, TRUE);
                        
            return TRUE;
                
                    
            case IDC_CANCEL:
                        EndDialog(dlg, FALSE);
                        
            return TRUE;

                    
            case IDC_SETALL:
                        spell_wnd = GetDlgItem(dlg, IDC_SPELLS);

                        
            for(int i = 0; i < 64; i++)
                            set_listbox_sel(spell_wnd, TRUE, i);
                        
            break;

                    
            case IDC_CLEARALL:
                        spell_wnd = GetDlgItem(dlg, IDC_SPELLS);

                        
            for(int i = 0; i < 64; i++)
                            set_listbox_sel(spell_wnd, FALSE, i);
                        
            break;
                    }

                    
            break;
                }

                
            return FALSE;
            }

            //////////////////////////////////////////////////////////////////////////////////////////////

            LRESULT CALLBACK window_proc(HWND hwnd, UINT msg, WPARAM word_param, LPARAM long_param)
            {
                
            int sel;
                
            char text[256];
                HWND listbox;

                
            switch(msg)
                {
                
            case WM_COMMAND:
                    
            switch(LOWORD(word_param))
                    {
                    
            case IDC_NEW:   // new mcl file
                        new_mcl();
                        
            break;

                    
            case IDC_LOAD:  // load a mcl file
                        load_mcl();
                        
            break;

                    
            case IDC_SAVE:  // save a mcl file
                        save_mcl();
                        
            break;

                    
            case IDC_CLEAR: // clear an entry          
                        listbox = GetDlgItem(g_hwnd, IDC_CHARACTERS);

                        
            // see if a spell was selected
                        if((sel = (int)get_listbox_cur_sel(listbox)) == LB_ERR)
                            
            break;
                        
                        ZeroMemory(&g_chars[sel], 
            sizeof(sCharDef));
                        reset_character(g_chars[sel]);

                        delete_listbox_string(listbox, sel);
                        sprintf(text, "%5lu:", sel);
                        insert_string_to_listbox(listbox, sel, text);
                        
            break;

                    
            case IDC_CHARACTERS:    // edit an entry
                        if(HIWORD(word_param) != LBN_DBLCLK)
                            
            break;
                    
            case IDC_EDIT:
                        listbox = GetDlgItem(hwnd, IDC_CHARACTERS);

                        
            if((sel = (int)get_listbox_cur_sel(listbox)) == LB_ERR)
                            
            break;

                        g_edit_char = sel;

                        DialogBox(NULL, MAKEINTRESOURCE(IDD_MODIFY), hwnd, modify_dialog_proc);
                        
                        delete_listbox_string(listbox, sel);
                        sprintf(text, "%5lu: %s", sel, g_chars[sel].name);
                        insert_string_to_listbox(listbox, sel, text);
                        
            break;
                    }

                    
            break;

                
            case WM_CREATE:
                    
            // Initialize the save/load dialog box info
                    ZeroMemory(&g_ofn, sizeof(OPENFILENAME));

                    g_ofn.lStructSize   = 
            sizeof(OPENFILENAME);
                    g_ofn.nMaxFile      = MAX_PATH;
                    g_ofn.nMaxFileTitle = MAX_PATH;
                    g_ofn.Flags         = OFN_HIDEREADONLY;
                    
                    strcpy(g_mcl_file, "..\\Data\\Default.MCL");
                    
            break;

                
            case WM_DESTROY:
                    PostQuitMessage(0);
                    
            break;

                
            default
                    
            return DefWindowProc(hwnd, msg, word_param, long_param);
                }

                
            return 0;
            }

            //////////////////////////////////////////////////////////////////////////////////////////////

            int WINAPI WinMain(HINSTANCE inst, HINSTANCE, LPSTR cmd_line, int cmd_show)
            {
                
            const char* class_name = "MCLEDIT";

                WNDCLASS wc;  

                
            // Register window class
                wc.style         = CS_HREDRAW | CS_VREDRAW;
                wc.lpfnWndProc   = window_proc;
                wc.cbClsExtra    = 0;
                wc.cbWndExtra    = DLGWINDOWEXTRA;
                wc.hInstance     = inst;
                wc.hIcon         = LoadIcon(inst, IDI_APPLICATION);
                wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
                wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
                wc.lpszMenuName  = NULL;
                wc.lpszClassName = class_name;

                RegisterClass(&wc);

                g_hwnd = CreateDialog(inst, MAKEINTRESOURCE(IDD_EDIT), 0, NULL);

                ShowWindow(g_hwnd, cmd_show);
                UpdateWindow(g_hwnd);  

                
            // Force a load of characters from default.MCL
                load_chars("..\\Data\\Default.MCL");

                MSG msg;

                
            while(GetMessage(&msg, NULL, 0, 0)) 
                {
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
                }

                UnregisterClass(class_name, inst);

                
            return 0;
            }

            posted on 2007-12-03 22:05 lovedday 閱讀(416) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            国内精品久久久久久久97牛牛 | 一本色道久久88精品综合| 一本久久精品一区二区| 久久久久久综合网天天| 国产99久久久国产精免费| 亚洲国产另类久久久精品黑人| 国内精品久久久久久中文字幕| 亚洲精品乱码久久久久66| 久久线看观看精品香蕉国产| 久久精品一本到99热免费| 久久精品国产一区| 国产精品无码久久综合| 久久久久亚洲精品中文字幕| 狠狠色丁香婷婷综合久久来来去 | 久久亚洲国产精品成人AV秋霞| 色综合久久天天综合| 久久人妻AV中文字幕| 久久国产免费直播| 国产精品成人久久久久久久| 东方aⅴ免费观看久久av| 久久精品国产72国产精福利| 国内精品久久久久影院日本 | 久久久女人与动物群交毛片| 97久久婷婷五月综合色d啪蜜芽| 亚洲乱亚洲乱淫久久| 狠狠综合久久综合中文88| 欧美va久久久噜噜噜久久| 狠狠色丁香婷婷综合久久来| 一本色道久久综合狠狠躁| 一级a性色生活片久久无少妇一级婬片免费放| 国产精品久久自在自线观看| 麻豆精品久久久一区二区| 久久久久亚洲AV片无码下载蜜桃| 精品久久久中文字幕人妻| 午夜精品久久久久久| 天天躁日日躁狠狠久久| 久久精品国产亚洲AV影院| 亚洲va中文字幕无码久久| 久久99热这里只频精品6| 777午夜精品久久av蜜臀| 国产精品亚洲综合久久|