青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

Controlling Players and Characters(22)

 

download source and project

 

Creating MSL edit

 

main window design:

 

modify spell window design:

 

resouce.h

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by MSLEdit.rc
//

#define IDD_EDIT                        101
#define IDD_MODIFY                      102
#define IDC_LOAD                        1000
#define IDC_SAVE                        1001
#define IDC_CHARACTERS                  1002
#define IDC_NEW                         1003
#define IDC_OK                          1004
#define IDC_NUM                         1005
#define IDC_WEAPON                      1006
#define IDC_ARMOR                       1007
#define IDC_SHIELD                      1008
#define IDC_HEALING                     1009
#define IDC_CONTAINER                   1010
#define IDC_MONEY                       1011
#define IDC_ACCESSORY                   1012
#define IDC_EDIBLE                      1013
#define IDC_COLLECTION                  1014
#define IDC_TRANSPORTATION              1015
#define IDC_SELLABLE                    1016
#define IDC_CANDROP                     1017
#define IDC_USEONCE                     1018
#define IDC_UNKNOWN                     1019
#define IDC_SPELLS                      1020
#define IDC_NAME                        1021
#define IDC_DESCRIPTION                 1022
#define IDC_NAME2                       1023
#define IDC_MESH1                       1023
#define IDC_WEIGHT                      1024
#define IDC_NAME3                       1024
#define IDC_SCRIPT                      1024
#define IDC_NAME4                       1025
#define IDC_SPEED1                      1025
#define IDC_VALUE                       1026
#define IDC_HEALTH                      1026
#define IDC_PRICE                       1027
#define IDC_MANA                        1027
#define IDC_CURE                        1028
#define IDC_CAUSE                       1029
#define IDC_ITEM                        1030
#define IDC_MESH                        1031
#define IDC_KILL                        1031
#define IDC_CANCEL                      1032
#define IDC_ATTACK                      1033
#define IDC_NOTHING                     1033
#define IDC_DEFENSE                     1034
#define IDC_SINGLE                      1034
#define IDC_AGILITY                     1035
#define IDC_AREA                        1035
#define IDC_ABILITY                     1036
#define IDC_SELF                        1037
#define IDC_GROUP                       1038
#define IDC_CASTER1                     1039
#define IDC_RADIO13                     1040
#define IDC_DISPEL                      1040
#define IDC_TELEPORT                    1041
#define IDC_TOTARGET1                   1042
#define IDC_TOCASTER1                   1043
#define IDC_TARGET1                     1044
#define IDC_NAME5                       1045
#define IDC_SOUND                       1045
#define IDC_SOUND1                      1045
#define IDC_NAME6                       1046
#define IDC_MESH2                       1046
#define IDC_DROPITEM                    1047
#define IDC_CASTER2                     1047
#define IDC_TODROP                      1048
#define IDC_TOTARGET2                   1048
#define IDC_CHARGE                      1049
#define IDC_DMGCLASS                    1049
#define IDC_CHARGE2                     1050
#define IDC_CHANCE                      1050
#define IDC_SPEED                       1051
#define IDC_CHARGE3                     1051
#define IDC_VALUE1                      1051
#define IDC_TOATTACK                    1052
#define IDC_CHARGE4                     1052
#define IDC_COST                        1052
#define IDC_TOMAGIC                     1053
#define IDC_CHARGE5                     1053
#define IDC_RANGE                       1053
#define IDC_CHARGE6                     1054
#define IDC_VALUE2                      1054
#define IDC_EFFECT                      1055
#define IDC_TOCASTER2                   1055
#define IDC_EDIT                        1056
#define IDC_TARGET2                     1056
#define IDC_CLEAR                       1057
#define IDC_NAME7                       1057
#define IDC_SPEED2                      1057
#define IDC_NAME8                       1058
#define IDC_MESH3                       1058
#define IDC_CASTER3                     1059
#define IDC_TOTARGET3                   1060
#define IDC_TOCASTER3                   1061
#define IDC_TARGET3                     1062
#define IDC_NAME9                       1063
#define IDC_SPEED3                      1063
#define IDC_VALUE3                      1064
#define IDC_CURECLASS                   1065
#define IDC_SOUND2                      1066
#define IDC_SOUND3                      1067
#define IDC_RAISE                       1068
#define IDC_NONE1                       1069
#define IDC_NONE2                       1070
#define IDC_NONE3                       1071
#define IDC_VALUE4                      1072
#define IDC_DISTANCE                    1073
#define IDC_SCALE1                      1074
#define IDC_SCALE2                      1075
#define IDC_SCALE3                      1076
#define IDC_LOOP1                       1077
#define IDC_LOOP2                       1078
#define IDC_LOOP3                       1079

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        103
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1078
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

 

msl_edit.rc:

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_EDIT DIALOGEX 0, 0, 267, 130
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Master Spell List Editor"
CLASS "MSLEdit"
FONT 11, "Segoe UI", 400, 0, 0x0
BEGIN
    PUSHBUTTON      "Load",IDC_LOAD,210,90,50,14
    PUSHBUTTON      "Save",IDC_SAVE,210,110,50,14
    LISTBOX         IDC_SPELLS,5,15,195,109,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
    LTEXT           "Spell List",IDC_STATIC,5,5,50,8
    PUSHBUTTON      "New",IDC_NEW,210,70,50,14
    DEFPUSHBUTTON   "Edit",IDC_EDIT,210,15,50,14
    PUSHBUTTON      "Clear",IDC_CLEAR,210,35,50,14
END

IDD_MODIFY DIALOGEX 0, 0, 321, 286
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Modify Spell"
FONT 11, "Segoe UI", 400, 0, 0x0
BEGIN
    EDITTEXT        IDC_NAME,49,20,80,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_DESCRIPTION,49,35,80,35,ES_MULTILINE | WS_VSCROLL
    EDITTEXT        IDC_DMGCLASS,49,74,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_CURECLASS,49,89,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_COST,49,105,45,12,ES_AUTOHSCROLL
    CONTROL         "Alter Health",IDC_HEALTH,"Button",BS_AUTORADIOBUTTON,140,5,65,10
    CONTROL         "Alter Mana",IDC_MANA,"Button",BS_AUTORADIOBUTTON,140,15,65,10
    CONTROL         "Cure Effect",IDC_CURE,"Button",BS_AUTORADIOBUTTON,140,24,65,10
    CONTROL         "Cause Effect",IDC_CAUSE,"Button",BS_AUTORADIOBUTTON,140,34,65,10
    CONTROL         "Raise Dead",IDC_RAISE,"Button",BS_AUTORADIOBUTTON,140,43,70,10
    CONTROL         "Instant Kill",IDC_KILL,"Button",BS_AUTORADIOBUTTON,140,53,65,10
    CONTROL         "Dispel Magic",IDC_DISPEL,"Button",BS_AUTORADIOBUTTON,140,63,65,10
    CONTROL         "Teleport",IDC_TELEPORT,"Button",BS_AUTORADIOBUTTON,140,73,65,10
    EDITTEXT        IDC_CHANCE,266,5,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_VALUE1,266,20,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_VALUE2,266,35,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_VALUE3,266,50,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_VALUE4,266,65,45,12,ES_AUTOHSCROLL
    CONTROL         "Targets Single",IDC_SINGLE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,235,90,65,8
    CONTROL         "Targets Self",IDC_SELF,"Button",BS_AUTORADIOBUTTON,235,99,55,8
    CONTROL         "Targets Area",IDC_AREA,"Button",BS_AUTORADIOBUTTON,235,109,55,8
    EDITTEXT        IDC_RANGE,151,90,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_DISTANCE,151,105,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_MESH1,49,130,45,12,ES_AUTOHSCROLL
    CONTROL         "Loop Animation",IDC_LOOP1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,145,75,10
    CONTROL         "N/A",IDC_NONE1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,25,159,75,8
    CONTROL         "Caster",IDC_CASTER1,"Button",BS_AUTORADIOBUTTON,25,168,75,8
    CONTROL         "Caster to Target",IDC_TOTARGET1,"Button",BS_AUTORADIOBUTTON,25,178,75,8
    CONTROL         "Target to Caster",IDC_TOCASTER1,"Button",BS_AUTORADIOBUTTON,25,188,75,8
    CONTROL         "Target",IDC_TARGET1,"Button",BS_AUTORADIOBUTTON,25,199,75,8
    CONTROL         "Scale Distance",IDC_SCALE1,"Button",BS_AUTORADIOBUTTON,25,209,75,8
    EDITTEXT        IDC_SPEED1,61,225,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_SOUND1,61,239,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_MESH2,151,130,45,12,ES_AUTOHSCROLL
    CONTROL         "Loop Animation",IDC_LOOP2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,115,145,75,10
    CONTROL         "N/A",IDC_NONE2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,115,159,75,8
    CONTROL         "Caster",IDC_CASTER2,"Button",BS_AUTORADIOBUTTON,115,168,75,8
    CONTROL         "Caster to Target",IDC_TOTARGET2,"Button",BS_AUTORADIOBUTTON,115,178,75,8
    CONTROL         "Target to Caster",IDC_TOCASTER2,"Button",BS_AUTORADIOBUTTON,115,188,75,8
    CONTROL         "Target",IDC_TARGET2,"Button",BS_AUTORADIOBUTTON,115,199,75,8
    CONTROL         "Scale Distance",IDC_SCALE2,"Button",BS_AUTORADIOBUTTON,115,209,75,8
    EDITTEXT        IDC_SPEED2,161,225,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_SOUND2,161,239,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_MESH3,245,130,45,12,ES_AUTOHSCROLL
    CONTROL         "Loop Animation",IDC_LOOP3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,210,145,75,10
    CONTROL         "N/A",IDC_NONE3,"Button",BS_AUTORADIOBUTTON | WS_GROUP,211,159,75,8
    CONTROL         "Caster",IDC_CASTER3,"Button",BS_AUTORADIOBUTTON,211,168,75,8
    CONTROL         "Caster to Target",IDC_TOTARGET3,"Button",BS_AUTORADIOBUTTON,211,178,75,8
    CONTROL         "Target to Caster",IDC_TOCASTER3,"Button",BS_AUTORADIOBUTTON,211,188,75,8
    CONTROL         "Target",IDC_TARGET3,"Button",BS_AUTORADIOBUTTON,211,199,75,8
    CONTROL         "Scale Distance",IDC_SCALE3,"Button",BS_AUTORADIOBUTTON,211,209,75,8
    EDITTEXT        IDC_SPEED3,262,225,45,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_SOUND3,262,239,45,12,ES_AUTOHSCROLL
    DEFPUSHBUTTON   "OK",IDC_OK,89,265,50,14
    PUSHBUTTON      "Cancel",IDC_CANCEL,185,266,50,14
    LTEXT           "Spell #",IDC_STATIC,5,5,25,10
    LTEXT           "#",IDC_NUM,35,5,50,10
    RTEXT           "Name",IDC_STATIC,21,20,25,10
    RTEXT           "Description",IDC_STATIC,5,35,40,10
    RTEXT           "2x Dmg Class",IDC_STATIC,0,75,45,10
    RTEXT           "Effect Chance",IDC_STATIC,210,5,50,10
    RTEXT           "Spell Value 1",IDC_STATIC,216,20,45,10
    RTEXT           "Cost (MP)",IDC_STATIC,10,106,35,10
    RTEXT           "Range",IDC_STATIC,110,90,35,10
    RTEXT           "Spell Value 2",IDC_STATIC,216,35,45,10
    RTEXT           "Speed/Time",IDC_STATIC,10,225,46,10
    RTEXT           "Sound #",IDC_STATIC,20,241,36,10
    RTEXT           "Speed/Time",IDC_STATIC,116,226,41,10
    RTEXT           "Spell Value 3",IDC_STATIC,216,50,45,10
    RTEXT           "Cure Class",IDC_STATIC,5,90,40,10
    RTEXT           "Speed/Time",IDC_STATIC,217,225,41,10
    RTEXT           "Mesh #1",IDC_STATIC,12,130,35,10
    RTEXT           "Mesh #2",IDC_STATIC,110,130,35,10
    RTEXT           "Mesh #3",IDC_STATIC,209,130,31,10
    RTEXT           "Sound #",IDC_STATIC,121,241,36,10
    RTEXT           "Sound #",IDC_STATIC,222,241,36,10
    LTEXT           "Max Distance",IDC_STATIC,102,106,46,10
    RTEXT           "Spell Value 4",IDC_STATIC,215,65,45,10
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO 
BEGIN
    IDD_EDIT, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 260
        TOPMARGIN, 7
        BOTTOMMARGIN, 123
    END

    IDD_MODIFY, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 314
        TOPMARGIN, 7
        BOTTOMMARGIN, 279
    END
END
#endif    // APSTUDIO_INVOKED


#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED

#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

 

main routine:

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

#pragma warning(disable : 4996)

#define MAX_SPELLS  64

HWND g_hwnd;                   
// Window handle

OPENFILENAME g_ofn;            
// Open/Save dialog data
char g_mls_file[MAX_PATH];     // Filename for spell file

sSpell g_spells[MAX_SPELLS];   
// Spell list
long   g_edit_spell;           // Spell to modify

const WORD g_effects[8] = 
{
    IDC_HEALTH, IDC_MANA, IDC_CURE, IDC_CAUSE, IDC_RAISE, IDC_KILL, IDC_DISPEL, IDC_TELEPORT 
};

const WORD g_targets[3] = { IDC_SINGLE, IDC_SELF, IDC_AREA };

const WORD g_positions[18] = 
{
    IDC_NONE1, IDC_CASTER1, IDC_TOTARGET1, IDC_TOCASTER1, IDC_TARGET1, IDC_SCALE1,
    IDC_NONE2, IDC_CASTER2, IDC_TOTARGET2, IDC_TOCASTER2, IDC_TARGET2, IDC_SCALE2,
    IDC_NONE3, IDC_CASTER3, IDC_TOTARGET3, IDC_TOCASTER3, IDC_TARGET3, IDC_SCALE3,
};

const WORD g_loops[3] = { IDC_LOOP1, IDC_LOOP2, IDC_LOOP3 };

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

void reset_spell(sSpell& spell)
{
    
// Reset spell damage and cure classes
    spell.damage_class  = -1;
    spell.cure_class    = -1;

    
// Reset sounds
    spell.mesh_sound[0] = -1;
    spell.mesh_sound[1] = -1;
    spell.mesh_sound[2] = -1;
}

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

bool load_spells(const char* filename)
{
    
// load all spells from file and insert into listbox.

    // Clear item structures
    for(long i = 0; i < MAX_SPELLS; i++) 
    {
        ZeroMemory(&g_spells[i], 
sizeof(sSpell));
        reset_spell(g_spells[i]);
    }

    FILE* fp;

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

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

    
// update spell's listbox

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

    
for(long i = 0; i < MAX_SPELLS; i++)
    {
        
char text[256];
        sprintf(text, "%5lu: %s", i, g_spells[i].name);
        add_string_to_listbox(listbox, text);
    }

    
return true;
}

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

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

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

    
for(long i = 0; i < MAX_SPELLS; i++)
    {
        ZeroMemory(&g_spells[i], 
sizeof(sSpell));
        reset_spell(g_spells[i]);

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

    
return true;
}

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

bool load_msl()
{
    
// Setup the open dialog info
    g_ofn.hwndOwner   = g_hwnd;
    g_ofn.lpstrFile   = g_mls_file;
    g_ofn.lpstrTitle  = "Load MSL File";
    g_ofn.lpstrFilter = "MSL Spell Files (*.MSL)\0*.MSL\0All Files (*.*)\0*.*\0\0";
    g_ofn.lpstrDefExt = "MSL";
  
    
if(! GetOpenFileName(&g_ofn))
        
return false;

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

    
return true;
}

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

bool save_msl()
{
    
// Setup the open dialog info
    g_ofn.hwndOwner   = g_hwnd;
    g_ofn.lpstrFile   = g_mls_file;
    g_ofn.lpstrTitle  = "Load MSL File";
    g_ofn.lpstrFilter = "MSL Spell Files (*.MSL)\0*.MSL\0All Files (*.*)\0*.*\0\0";
    g_ofn.lpstrDefExt = "MSL";

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

    FILE* fp;

    
if((fp = fopen(g_mls_file, "wb")) == NULL)
        
return false;

    fwrite(g_spells, 1, 
sizeof(g_spells), fp);
    fclose(fp);
  
    
return true;
}

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

void update_entry(HWND hwnd, long spell_index)
{
    sSpell& spell = g_spells[spell_index];

    
// Get text entries
    GetWindowText(GetDlgItem(hwnd, IDC_NAME), spell.name, sizeof(spell.name));
    GetWindowText(GetDlgItem(hwnd, IDC_DESCRIPTION), spell.desc, 
sizeof(spell.desc));

    
char text[32];

    
// Get numerical entries
    GetWindowText(GetDlgItem(hwnd, IDC_DMGCLASS), text, sizeof(text));
    spell.damage_class = atol(text);
    GetWindowText(GetDlgItem(hwnd, IDC_CURECLASS), text, 
sizeof(text));
    spell.cure_class = atol(text);

    GetWindowText(GetDlgItem(hwnd, IDC_COST), text, 
sizeof(text));
    spell.cost = atol(text);

    GetWindowText(GetDlgItem(hwnd, IDC_DISTANCE), text, 
sizeof(text));
    g_spells[g_edit_spell].max_dist = (
float)atof(text);

    GetWindowText(GetDlgItem(hwnd, IDC_CHANCE), text, 
sizeof(text));
    spell.chance = atol(text);
    GetWindowText(GetDlgItem(hwnd, IDC_VALUE1), text, 
sizeof(text));
    spell.value[0] = (
float)atof(text);
    GetWindowText(GetDlgItem(hwnd, IDC_VALUE2), text, 
sizeof(text));
    spell.value[1] = (
float)atof(text);
    GetWindowText(GetDlgItem(hwnd, IDC_VALUE3), text, 
sizeof(text));
    spell.value[2] = (
float)atof(text);
    GetWindowText(GetDlgItem(hwnd, IDC_VALUE4), text, 
sizeof(text));
    spell.value[3] = (
float)atof(text);
    GetWindowText(GetDlgItem(hwnd, IDC_RANGE), text, 
sizeof(text));
    spell.range = (
float)atof(text);

    GetWindowText(GetDlgItem(hwnd, IDC_MESH1), text, 
sizeof(text));
    spell.mesh_index[0] = atol(text);
    GetWindowText(GetDlgItem(hwnd, IDC_SPEED1), text, 
sizeof(text));
    spell.mesh_speed[0] = (
float)atof(text);
    GetWindowText(GetDlgItem(hwnd, IDC_SOUND1), text, 
sizeof(text));
    spell.mesh_sound[0] = atol(text);

    GetWindowText(GetDlgItem(hwnd, IDC_MESH2), text, 
sizeof(text));
    spell.mesh_index[1] = atol(text);
    GetWindowText(GetDlgItem(hwnd, IDC_SPEED2), text, 
sizeof(text));
    spell.mesh_speed[1] = (
float)atof(text);
    GetWindowText(GetDlgItem(hwnd, IDC_SOUND2), text, 
sizeof(text));
    spell.mesh_sound[1] = atol(text);

    GetWindowText(GetDlgItem(hwnd, IDC_MESH3), text, 
sizeof(text));
    spell.mesh_index[2] = atol(text);
    GetWindowText(GetDlgItem(hwnd, IDC_SPEED3), text, 
sizeof(text));
    spell.mesh_speed[2] = (
float)atof(text);
    GetWindowText(GetDlgItem(hwnd, IDC_SOUND3), text, 
sizeof(text));
    spell.mesh_sound[2] = atol(text);

    
// Get selection entries

    
for(long i = 0; i < 8; i++) 
    {
      
if(SendMessage(GetDlgItem(hwnd, g_effects[i]), BM_GETCHECK, 0, 0)) 
      {
        spell.effect = i;
        
break;
      }
    }

    
for(long i = 0; i < 3; i++) 
    {
      
if(SendMessage(GetDlgItem(hwnd, g_targets[i]), BM_GETCHECK, 0, 0)) 
      {
        spell.target = i;
        
break;
      }
    }

    
for(long i = 0; i < 6; i++) 
    {
      
if(SendMessage(GetDlgItem(hwnd, g_positions[i]), BM_GETCHECK, 0, 0))
        spell.mesh_pos[0] = i;

      
if(SendMessage(GetDlgItem(hwnd, g_positions[i+6]), BM_GETCHECK, 0, 0))
        spell.mesh_pos[1] = i;

      
if(SendMessage(GetDlgItem(hwnd, g_positions[i+12]), BM_GETCHECK, 0, 0))
        spell.mesh_pos[2] = i;
    }

    
// Get loops
    spell.mesh_loop[0] = (BOOL) get_button_state(GetDlgItem(hwnd, g_loops[0]));        
    spell.mesh_loop[1] = (BOOL) get_button_state(GetDlgItem(hwnd, g_loops[1]));
    spell.mesh_loop[2] = (BOOL) get_button_state(GetDlgItem(hwnd, g_loops[2]));
}

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

BOOL CALLBACK modify_dialog_proc(HWND hwnd, UINT msg, WPARAM word_param, LPARAM long_param)
{
    
switch(msg)
    {
    
case WM_INITDIALOG:
      {
        
// return an error if there is no spell to modify
        if(g_edit_spell >= MAX_SPELLS)
        {
            EndDialog(hwnd, FALSE);
            
return FALSE;
        }

        
char text[32];

        
// display spell number
        sprintf(text, "%lu", g_edit_spell);
        SetWindowText(GetDlgItem(hwnd, IDC_NUM), text);

        sSpell& spell = g_spells[g_edit_spell];

        
// Display text entries
        SetWindowText(GetDlgItem(hwnd, IDC_NAME), spell.name);
        SetWindowText(GetDlgItem(hwnd, IDC_DESCRIPTION), spell.desc);

        
// Display numerical entries
        sprintf(text, "%ld", spell.damage_class);
        SetWindowText(GetDlgItem(hwnd, IDC_DMGCLASS), text);
        sprintf(text, "%ld", spell.cure_class);
        SetWindowText(GetDlgItem(hwnd, IDC_CURECLASS), text);

        sprintf(text, "%lu", spell.cost);
        SetWindowText(GetDlgItem(hwnd, IDC_COST), text);

        sprintf(text, "%lf", spell.max_dist);
        SetWindowText(GetDlgItem(hwnd, IDC_DISTANCE), text);
        sprintf(text, "%lf", spell.range);
        SetWindowText(GetDlgItem(hwnd, IDC_RANGE), text);

        sprintf(text, "%lu", spell.chance);
        SetWindowText(GetDlgItem(hwnd, IDC_CHANCE), text);
        sprintf(text, "%lf", spell.value[0]);
        SetWindowText(GetDlgItem(hwnd, IDC_VALUE1), text);
        sprintf(text, "%lf", spell.value[1]);
        SetWindowText(GetDlgItem(hwnd, IDC_VALUE2), text);
        sprintf(text, "%lf", spell.value[2]);
        SetWindowText(GetDlgItem(hwnd, IDC_VALUE3), text);
        sprintf(text, "%lf", spell.value[3]);
        SetWindowText(GetDlgItem(hwnd, IDC_VALUE4), text);      

        sprintf(text, "%lu", spell.mesh_index[0]);
        SetWindowText(GetDlgItem(hwnd, IDC_MESH1), text);
        sprintf(text, "%lf", spell.mesh_speed[0]);
        SetWindowText(GetDlgItem(hwnd, IDC_SPEED1), text);
        sprintf(text, "%ld", spell.mesh_sound[0]);
        SetWindowText(GetDlgItem(hwnd, IDC_SOUND1), text);

        sprintf(text, "%lu", spell.mesh_index[1]);
        SetWindowText(GetDlgItem(hwnd, IDC_MESH2), text);
        sprintf(text, "%lf", spell.mesh_speed[1]);
        SetWindowText(GetDlgItem(hwnd, IDC_SPEED2), text);
        sprintf(text, "%ld", spell.mesh_sound[1]);
        SetWindowText(GetDlgItem(hwnd, IDC_SOUND2), text);

        sprintf(text, "%lu", spell.mesh_index[2]);
        SetWindowText(GetDlgItem(hwnd, IDC_MESH3), text);
        sprintf(text, "%lf", spell.mesh_speed[2]);
        SetWindowText(GetDlgItem(hwnd, IDC_SPEED3), text);
        sprintf(text, "%ld", spell.mesh_sound[2]);
        SetWindowText(GetDlgItem(hwnd, IDC_SOUND3), text);

        
// Display selection entries
        set_button_state(GetDlgItem(hwnd, g_effects[spell.effect]), TRUE);
        set_button_state(GetDlgItem(hwnd, g_targets[spell.target]), TRUE);
        set_button_state(GetDlgItem(hwnd, g_positions[spell.mesh_pos[0]]), TRUE);
        set_button_state(GetDlgItem(hwnd, g_positions[spell.mesh_pos[1]+6]), TRUE);
        set_button_state(GetDlgItem(hwnd, g_positions[spell.mesh_pos[2]+12]), TRUE);
                
        
// Display loops
        set_button_state(GetDlgItem(hwnd, g_loops[0]), spell.mesh_loop[0]);
        set_button_state(GetDlgItem(hwnd, g_loops[1]), spell.mesh_loop[1]);
        set_button_state(GetDlgItem(hwnd, g_loops[2]), spell.mesh_loop[2]);
    
        
return TRUE;
      }

    
case WM_COMMAND:
        
switch(LOWORD(word_param))
        {
        
case IDC_OK:
            update_entry(hwnd, g_edit_spell);
            EndDialog(hwnd, TRUE);
            
return TRUE;

        
case IDC_CANCEL:
            EndDialog(hwnd, FALSE);
            
return TRUE;
        }

        
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 msl file
            new_msl();
            
break;

        
case IDC_LOAD:  // load a msl file
            load_msl();
            
break;

        
case IDC_SAVE:  // save a msl file
            save_msl();
            
break;

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

            
// see if a spell was selected
            if((sel = (int)get_listbox_cur_sel(listbox)) == LB_ERR)
                
break;
            
            ZeroMemory(&g_spells[sel], 
sizeof(sSpell));
            reset_spell(g_spells[sel]);

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

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

            
// see if a spell was selected
            if((sel = (int)get_listbox_cur_sel(listbox)) == LB_ERR)
                
break;

            g_edit_spell = sel;

            DialogBox(NULL, MAKEINTRESOURCE(IDD_MODIFY), hwnd, modify_dialog_proc);

            
// update spell
            delete_listbox_string(listbox, sel);
            sprintf(text, "%5lu: %s", sel, g_spells[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;

        
// Set default MSL filename
        strcpy(g_mls_file, "..\\Data\\Default.MSL");

        
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 = "MSLEDIT";

    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 spells from default.MSL
    load_spells("..\\Data\\Default.MSL");

    MSG Msg;

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

    UnregisterClass(class_name, inst);

    
return 0;
}
 

posted on 2007-11-16 17:57 lovedday 閱讀(441) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品日本欧美一区二区三区| 亚洲校园激情| 亚洲国产合集| 新67194成人永久网站| 国产精品视频专区| 免费观看在线综合| 在线观看欧美日韩| 亚洲日本aⅴ片在线观看香蕉| 一区二区日韩| 亚洲精品之草原avav久久| 亚洲午夜精品久久| 欧美精品一区二区三| 91久久线看在观草草青青| 欧美精品成人91久久久久久久| 亚洲精品久久久一区二区三区| 亚洲美女中文字幕| 国产精品视频一区二区高潮| 国产麻豆9l精品三级站| 国产美女扒开尿口久久久| 性欧美大战久久久久久久免费观看 | 亚洲国产一区在线观看| 黄色一区二区在线| 中国女人久久久| 欧美韩国一区| 欧美成人小视频| 欧美成人午夜激情在线| 亚洲一区三区电影在线观看| 尤物精品在线| 国产精品午夜在线观看| 久久国产欧美精品| 亚洲一区二区视频在线| 亚洲免费中文字幕| 性伦欧美刺激片在线观看| 亚洲久久在线| 欧美成人日韩| 欧美日产一区二区三区在线观看| 香蕉国产精品偷在线观看不卡| 亚洲自拍三区| 久久香蕉国产线看观看av| 久久精品国产99| 亚洲天堂视频在线观看| 亚洲免费视频一区二区| 欧美综合国产| 欧美日韩免费观看中文| 亚洲一区网站| 欧美激情按摩在线| 亚洲国产精品久久久| 亚洲激情av| 欧美激情一区二区三区成人| 亚洲视频导航| 亚洲欧美一区二区精品久久久| 国产精品99久久久久久有的能看| 亚洲看片免费| 欧美日韩一区成人| 欧美第十八页| 欧美日韩免费观看一区三区| 亚洲高清一二三区| 久久久夜精品| 日韩视频精品在线观看| 牛牛精品成人免费视频| 91久久中文字幕| 欧美一区三区三区高中清蜜桃| 欧美激情一区二区三区蜜桃视频 | 国产精品推荐精品| 亚洲午夜伦理| 亚洲精品在线观看免费| 欧美人妖另类| 亚洲午夜av电影| 亚洲天堂成人| 国产欧美日韩一区二区三区| 欧美一区二区精品在线| 香蕉久久一区二区不卡无毒影院| 国产欧美一区二区三区在线老狼 | 久久欧美肥婆一二区| 国产在线播精品第三| 久久亚洲欧美| 免费视频最近日韩| 亚洲精品小视频在线观看| 亚洲九九九在线观看| 国产精品久久7| 久久久国产亚洲精品| 美女成人午夜| 正在播放亚洲| 欧美一级久久久| 91久久精品日日躁夜夜躁国产| 亚洲国产美女| 欧美四级在线观看| 久久亚洲一区二区| 欧美精品一区二区在线观看| 午夜一区二区三区不卡视频| 久久久久成人网| 中文av一区二区| 久久精品国产亚洲a| 亚洲美女精品久久| 午夜精品在线观看| 亚洲国产欧美另类丝袜| 中日韩午夜理伦电影免费| 国产综合色精品一区二区三区| 亚洲国产精品一区二区www| 国产精品萝li| 欧美激情一区二区三区在线| 国产精品福利网| 欧美第一黄网免费网站| 国产精品一区二区久久久久| 欧美激情中文字幕在线| 国产日韩欧美中文在线播放| 亚洲国产一区二区视频| 伊人成人开心激情综合网| 99国产麻豆精品| 亚洲激情电影在线| 午夜亚洲性色视频| 在线亚洲自拍| 久久婷婷亚洲| 久久久久久日产精品| 欧美四级伦理在线| 亚洲高清在线视频| 激情久久久久久久| 香蕉国产精品偷在线观看不卡| 亚洲专区在线| 欧美午夜免费| 一本色道久久综合狠狠躁篇怎么玩| 亚洲国产精品久久久| 久久av一区二区三区漫画| 亚洲影视中文字幕| 欧美极品一区| 亚洲精选视频免费看| 亚洲九九九在线观看| 久久一区二区三区av| 巨乳诱惑日韩免费av| 国产在线精品一区二区夜色| 亚洲综合成人婷婷小说| 亚洲欧美日韩成人高清在线一区| 欧美日韩www| 欧美.www| 亚洲精品乱码久久久久久久久| 有坂深雪在线一区| 久久精品五月| 美女日韩在线中文字幕| 极品尤物久久久av免费看| 久久av一区二区三区| 蜜臀久久久99精品久久久久久 | 亚洲美女视频| 欧美好吊妞视频| 亚洲人成网站在线观看播放| 亚洲区一区二区三区| 欧美黄色免费网站| 亚洲精品日日夜夜| 亚洲午夜精品一区二区| 国产精品亚洲不卡a| 久久国产精品99国产| 欧美岛国激情| 宅男精品视频| 国产日韩欧美高清| 久久久久在线| 最近中文字幕mv在线一区二区三区四区| 亚洲精品中文字幕在线观看| 欧美午夜精品久久久久久久| 亚洲欧美日韩一区二区三区在线| 久久国产欧美精品| 1024国产精品| 欧美三级电影大全| 亚洲欧美日韩第一区| 男人天堂欧美日韩| 日韩午夜电影| 国产精品一卡二| 米奇777在线欧美播放| 亚洲精品黄网在线观看| 亚洲免费伊人电影在线观看av| 国产亚洲毛片在线| 欧美不卡视频一区发布| 亚洲小少妇裸体bbw| 亚洲高清一区二区三区| 久久国产加勒比精品无码| 亚洲精品一区二区三区四区高清 | 免费在线观看成人av| 亚洲图片激情小说| 亚洲成色精品| 国产精品网曝门| 欧美精品一区二区三| 欧美在线短视频| 夜夜爽www精品| 欧美福利电影在线观看| 性色av一区二区三区在线观看 | 在线亚洲美日韩| 欧美.www| 久久精品中文| 国产性做久久久久久| 欧美xxx成人| 欧美一区二区免费| 一区二区三区久久网| 亚洲国产欧美在线| 久久成人这里只有精品| 亚洲天堂偷拍| 日韩亚洲欧美成人| 一区在线免费| 激情久久一区| 伊人久久噜噜噜躁狠狠躁| 国产性猛交xxxx免费看久久| 激情欧美一区二区三区在线观看 | 欧美三级视频|