Changeset 260 for trunk/src/shared

Show
Ignore:
Timestamp:
11/21/08 08:47:55 (17 years ago)
Author:
yumileroy
Message:

*DB script table stucture change. Source Mangos. Also fix some bugs. Hopefully this rev will make program usable again.

Original author: megamage
Date: 2008-11-20 10:43:20-06:00

Location:
trunk/src/shared
Files:
2 added
9 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/shared/Database/DBCStores.cpp

    r229 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020 
     
    122122// DBC used only for initialization sTaxiPathSetBySource at startup. 
    123123TaxiPathNodesByPath sTaxiPathNodesByPath; 
    124 struct TaxiPathNodeEntry 
    125 { 
    126     uint32    path; 
    127     uint32    index; 
    128     uint32    mapid; 
    129     float     x; 
    130     float     y; 
    131     float     z; 
    132     uint32    actionFlag; 
    133     uint32    delay; 
    134 }; 
     124 
    135125static DBCStorage <TaxiPathNodeEntry> sTaxiPathNodeStore(TaxiPathNodeEntryfmt); 
    136  
    137126DBCStorage <TotemCategoryEntry> sTotemCategoryStore(TotemCategoryEntryfmt); 
    138  
    139127DBCStorage <WorldMapAreaEntry>  sWorldMapAreaStore(WorldMapAreaEntryfmt); 
    140128DBCStorage <WorldSafeLocsEntry> sWorldSafeLocsStore(WorldSafeLocsEntryfmt); 
     
    236224        } 
    237225    } 
    238      
     226 
    239227    LoadDBC(availableDbcLocales,bar,bad_dbc_files,sFactionTemplateStore,     dbcPath,"FactionTemplate.dbc"); 
    240228    LoadDBC(availableDbcLocales,bar,bad_dbc_files,sGemPropertiesStore,       dbcPath,"GemProperties.dbc"); 
     
    284272    { 
    285273        SkillLineAbilityEntry const *skillLine = sSkillLineAbilityStore.LookupEntry(j); 
    286      
     274 
    287275        if(!skillLine) 
    288276            continue; 
     
    291279 
    292280        if(spellInfo && (spellInfo->Attributes & 0x1D0) == 0x1D0) 
    293         {       
     281        { 
    294282            for (unsigned int i = 1; i < sCreatureFamilyStore.GetNumRows(); ++i) 
    295283            { 
     
    298286                    continue; 
    299287 
    300                 if(skillLine->skillId != cFamily->skillLine && skillLine->skillId != cFamily->skillLine2) 
     288                if(skillLine->skillId != cFamily->skillLine[0] && skillLine->skillId != cFamily->skillLine[1]) 
    301289                    continue; 
    302290 
     
    310298    LoadDBC(availableDbcLocales,bar,bad_dbc_files,sSpellFocusObjectStore,    dbcPath,"SpellFocusObject.dbc"); 
    311299    LoadDBC(availableDbcLocales,bar,bad_dbc_files,sSpellItemEnchantmentStore,dbcPath,"SpellItemEnchantment.dbc"); 
    312      
    313300    LoadDBC(availableDbcLocales,bar,bad_dbc_files,sSpellItemEnchantmentConditionStore,dbcPath,"SpellItemEnchantmentCondition.dbc"); 
    314301    LoadDBC(availableDbcLocales,bar,bad_dbc_files,sSpellRadiusStore,         dbcPath,"SpellRadius.dbc"); 
     
    456443    // check at up-to-date DBC files (71 is last char title added in 2.4.3) 
    457444    // check at up-to-date DBC files (1768 is last area added in 2.4.3) 
    458     if( !sSpellStore.LookupEntry(53085)            ||  
    459         !sSkillLineAbilityStore.LookupEntry(17514) ||  
     445    if( !sSpellStore.LookupEntry(53085)            || 
     446        !sSkillLineAbilityStore.LookupEntry(17514) || 
    460447        !sMapStore.LookupEntry(598)                || 
    461         !sGemPropertiesStore.LookupEntry(1127)     ||  
    462         !sItemExtendedCostStore.LookupEntry(2425)  ||  
     448        !sGemPropertiesStore.LookupEntry(1127)     || 
     449        !sItemExtendedCostStore.LookupEntry(2425)  || 
    463450        !sCharTitlesStore.LookupEntry(71)          || 
    464451        !sAreaStore.LookupEntry(1768)              ) 
  • trunk/src/shared/Database/DBCStores.h

    r102 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020 
     
    7676        bool Load(char const* fn) 
    7777        { 
    78  
    7978            DBCFile dbc; 
    8079            // Check if load was sucessful, only then continue 
  • trunk/src/shared/Database/DBCStructure.h

    r230 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020 
     
    2222#define DBCSTRUCTURE_H 
    2323 
     24#include "DBCEnums.h" 
    2425#include "Platform/Define.h" 
    2526 
     
    3637#pragma pack(push,1) 
    3738#endif 
    38  
    39 enum AreaTeams 
    40 { 
    41     AREATEAM_NONE  = 0, 
    42     AREATEAM_ALLY  = 2, 
    43     AREATEAM_HORDE = 4 
    44 }; 
    45  
    46 enum AreaFlags 
    47 { 
    48     AREA_FLAG_SNOW             = 0x00000001,                // snow (only Dun Morogh, Naxxramas, Razorfen Downs and Winterspring) 
    49     AREA_FLAG_UNK1             = 0x00000002,                // unknown, (only Naxxramas and Razorfen Downs) 
    50     AREA_FLAG_UNK2             = 0x00000004,                // Only used on development map 
    51     AREA_FLAG_SLAVE_CAPITAL    = 0x00000008,                // slave capital city flag? 
    52     AREA_FLAG_UNK3             = 0x00000010,                // unknown 
    53     AREA_FLAG_SLAVE_CAPITAL2   = 0x00000020,                // slave capital city flag? 
    54     AREA_FLAG_UNK4             = 0x00000040,                // many zones have this flag 
    55     AREA_FLAG_ARENA            = 0x00000080,                // arena, both instanced and world arenas 
    56     AREA_FLAG_CAPITAL          = 0x00000100,                // main capital city flag 
    57     AREA_FLAG_CITY             = 0x00000200,                // only for one zone named "City" (where it located?) 
    58     AREA_FLAG_OUTLAND          = 0x00000400,                // outland zones? (only Eye of the Storm not have this flag, but have 0x00004000 flag) 
    59     AREA_FLAG_SANCTUARY        = 0x00000800,                // sanctuary area (PvP disabled) 
    60     AREA_FLAG_NEED_FLY         = 0x00001000,                // only Netherwing Ledge, Socrethar's Seat, Tempest Keep, The Arcatraz, The Botanica, The Mechanar, Sorrow Wing Point, Dragonspine Ridge, Netherwing Mines, Dragonmaw Base Camp, Dragonmaw Skyway 
    61     AREA_FLAG_UNUSED1          = 0x00002000,                // not used now (no area/zones with this flag set in 2.4.2) 
    62     AREA_FLAG_OUTLAND2         = 0x00004000,                // outland zones? (only Circle of Blood Arena not have this flag, but have 0x00000400 flag) 
    63     AREA_FLAG_PVP              = 0x00008000,                // pvp objective area? (Death's Door also has this flag although it's no pvp object area) 
    64     AREA_FLAG_ARENA_INSTANCE   = 0x00010000,                // used by instanced arenas only 
    65     AREA_FLAG_UNUSED2          = 0x00020000,                // not used now (no area/zones with this flag set in 2.4.2) 
    66     AREA_FLAG_UNK5             = 0x00040000,                // just used for Amani Pass, Hatchet Hills 
    67     AREA_FLAG_LOWLEVEL         = 0x00100000                 // used for some starting areas with area_level <=15 
    68 }; 
    69  
    70 enum FactionTemplateFlags 
    71 { 
    72     FACTION_TEMPLATE_FLAG_CONTESTED_GUARD   =   0x00001000, // faction will attack players that were involved in PvP combats 
    73 }; 
    7439 
    7540struct AreaTableEntry 
     
    180145                                                            // 64 string flags, unused 
    181146                                                            // 65-67 unused 
    182     uint32    addon;                                         // 68 (0 - original race, 1 - tbc addon, ...) 
     147    uint32      addon;                                      // 68 (0 - original race, 1 - tbc addon, ...) 
    183148}; 
    184149 
     
    194159{ 
    195160    uint32    ID;                                           // 0 
    196     float     minScale;                                     // 1   
    197     uint32    minScaleLevel;                                // 2 0/1       
     161    float     minScale;                                     // 1 
     162    uint32    minScaleLevel;                                // 2 0/1 
    198163    float     maxScale;                                     // 3 
    199164    uint32    maxScaleLevel;                                // 4 0/60 
    200     uint32    skillLine;                                    // 5 
    201     uint32    skillLine2;                                   // 6 
     165    uint32    skillLine[2];                                 // 5-6 
    202166    uint32    petFoodMask;                                  // 7 
    203167    char*     Name[16];                                     // 8-23 
     
    243207    //char*     description[16];                            // 36-51 unused 
    244208                                                            // 52 string flags, unused 
    245 }; 
    246  
    247 enum FactionMasks 
    248 { 
    249     FACTION_MASK_PLAYER   = 1,                              // any player 
    250     FACTION_MASK_ALLIANCE = 2,                              // player or creature from alliance team 
    251     FACTION_MASK_HORDE    = 4,                              // player or creature from horde team 
    252     FACTION_MASK_MONSTER  = 8                               // aggressive creature from monster team 
    253                                                             // if none flags set then non-aggressive creature 
    254209}; 
    255210 
     
    302257 
    303258#define GT_MAX_LEVEL    100 
     259 
    304260struct GtCombatRatingsEntry 
    305261{ 
     
    430386                                                            // 17 name flags, unused 
    431387    //char*       content[16];                              // 18-33 
    432 }; 
    433  
    434 enum MapTypes 
    435 { 
    436     MAP_COMMON          = 0, 
    437     MAP_INSTANCE        = 1, 
    438     MAP_RAID            = 2, 
    439     MAP_BATTLEGROUND    = 3, 
    440     MAP_ARENA           = 4 
    441388}; 
    442389 
     
    544491                                                            // 36 string flags, not used 
    545492    uint32    spellIcon;                                    // 37 
    546 }; 
    547  
    548 enum AbilytyLearnType 
    549 { 
    550     ABILITY_LEARNED_ON_GET_PROFESSION_SKILL     = 1, 
    551     ABILITY_LEARNED_ON_GET_RACE_OR_CLASS_SKILL  = 2 
    552493}; 
    553494 
     
    759700}; 
    760701 
    761 enum ItemEnchantmentType 
    762 { 
    763     ITEM_ENCHANTMENT_TYPE_NONE         = 0, 
    764     ITEM_ENCHANTMENT_TYPE_COMBAT_SPELL = 1, 
    765     ITEM_ENCHANTMENT_TYPE_DAMAGE       = 2, 
    766     ITEM_ENCHANTMENT_TYPE_EQUIP_SPELL  = 3, 
    767     ITEM_ENCHANTMENT_TYPE_RESISTANCE   = 4, 
    768     ITEM_ENCHANTMENT_TYPE_STAT         = 5, 
    769     ITEM_ENCHANTMENT_TYPE_TOTEM        = 6 
    770 }; 
    771  
    772702struct SpellItemEnchantmentEntry 
    773703{ 
     
    827757}; 
    828758 
    829 struct TaxiPathEntry 
    830 { 
    831     uint32    ID; 
    832     uint32    from; 
    833     uint32    to; 
    834     uint32    price; 
    835 }; 
    836  
    837759struct TaxiNodesEntry 
    838760{ 
     
    848770}; 
    849771 
    850 enum TotemCategoryType 
    851 { 
    852     TOTEM_CATEGORY_TYPE_KNIFE   = 1, 
    853     TOTEM_CATEGORY_TYPE_TOTEM   = 2, 
    854     TOTEM_CATEGORY_TYPE_ROD     = 3, 
    855     TOTEM_CATEGORY_TYPE_PICK    = 21, 
    856     TOTEM_CATEGORY_TYPE_STONE   = 22, 
    857     TOTEM_CATEGORY_TYPE_HAMMER  = 23, 
    858     TOTEM_CATEGORY_TYPE_SPANNER = 24 
     772struct TaxiPathEntry 
     773{ 
     774    uint32    ID; 
     775    uint32    from; 
     776    uint32    to; 
     777    uint32    price; 
     778}; 
     779 
     780struct TaxiPathNodeEntry 
     781{ 
     782    uint32    path; 
     783    uint32    index; 
     784    uint32    mapid; 
     785    float     x; 
     786    float     y; 
     787    float     z; 
     788    uint32    actionFlag; 
     789    uint32    delay; 
    859790}; 
    860791 
  • trunk/src/shared/Database/SQLStorage.cpp

    r102 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020 
    2121#include "SQLStorage.h" 
    22 #include "ProgressBar.h" 
    23 #include "Log.h" 
    24 #include "dbcfile.h" 
     22#include "SQLStorageImpl.h" 
    2523 
    2624#ifdef DO_POSTGRESQL 
     
    3028#endif 
    3129 
    32 const char CreatureInfofmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiilliiis"; 
     30const char CreatureInfosrcfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiilliiis"; 
     31const char CreatureInfodstfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiilliiii"; 
    3332const char CreatureDataAddonInfofmt[]="iiiiiiis"; 
    3433const char CreatureModelfmt[]="iffbi"; 
    3534const char CreatureInfoAddonInfofmt[]="iiiiiiis"; 
    3635const char EquipmentInfofmt[]="iiiiiiiiii"; 
    37 const char GameObjectInfofmt[]="iiissiifiiiiiiiiiiiiiiiiiiiiiiiis"; 
    38 const char ItemPrototypefmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiffiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifsiiiii"; 
     36const char GameObjectInfosrcfmt[]="iiissiifiiiiiiiiiiiiiiiiiiiiiiiis"; 
     37const char GameObjectInfodstfmt[]="iiissiifiiiiiiiiiiiiiiiiiiiiiiiii"; 
     38const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiffiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifsiiiii"; 
     39const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiffiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiii"; 
    3940const char PageTextfmt[]="isi"; 
    4041const char SpellThreatfmt[]="ii"; 
    41 const char InstanceTemplatefmt[]="iiiiiiffffs"; 
     42const char InstanceTemplatesrcfmt[]="iiiiiiffffs"; 
     43const char InstanceTemplatedstfmt[]="iiiiiiffffi"; 
    4244 
    43 SQLStorage sCreatureStorage(CreatureInfofmt,"entry","creature_template"); 
     45SQLStorage sCreatureStorage(CreatureInfosrcfmt, CreatureInfodstfmt, "entry","creature_template"); 
    4446SQLStorage sCreatureDataAddonStorage(CreatureDataAddonInfofmt,"guid","creature_addon"); 
    4547SQLStorage sCreatureModelStorage(CreatureModelfmt,"modelid","creature_model_info"); 
    4648SQLStorage sCreatureInfoAddonStorage(CreatureInfoAddonInfofmt,"entry","creature_template_addon"); 
    4749SQLStorage sEquipmentStorage(EquipmentInfofmt,"entry","creature_equip_template"); 
    48 SQLStorage sGOStorage(GameObjectInfofmt,"entry","gameobject_template"); 
    49 SQLStorage sItemStorage(ItemPrototypefmt,"entry","item_template"); 
     50SQLStorage sGOStorage(GameObjectInfosrcfmt, GameObjectInfodstfmt, "entry","gameobject_template"); 
     51SQLStorage sItemStorage(ItemPrototypesrcfmt, ItemPrototypedstfmt, "entry","item_template"); 
    5052SQLStorage sPageTextStore(PageTextfmt,"entry","page_text"); 
    5153SQLStorage sSpellThreatStore(SpellThreatfmt,"entry","spell_threat"); 
    52 SQLStorage sInstanceTemplate(InstanceTemplatefmt,"map","instance_template"); 
     54SQLStorage sInstanceTemplate(InstanceTemplatesrcfmt, InstanceTemplatedstfmt, "map","instance_template"); 
    5355 
    5456void SQLStorage::Free () 
     
    5658    uint32 offset=0; 
    5759    for(uint32 x=0;x<iNumFields;x++) 
    58         if (format[x]==FT_STRING) 
     60        if (dst_format[x]==FT_STRING) 
    5961        { 
    6062            for(uint32 y=0;y<MaxEntry;y++) 
     
    6264                    delete [] *(char**)((char*)(pIndex[y])+offset); 
    6365 
    64             offset+=sizeof(char*); 
     66            offset += sizeof(char*); 
    6567        } 
    66         else if (format[x]==FT_LOGIC) 
    67             offset+=sizeof(bool); 
    68         else if (format[x]==FT_BYTE) 
    69             offset+=sizeof(char); 
     68        else if (dst_format[x]==FT_LOGIC) 
     69            offset += sizeof(bool); 
     70        else if (dst_format[x]==FT_BYTE) 
     71            offset += sizeof(char); 
    7072        else 
    71             offset+=4; 
     73            offset += 4; 
    7274 
    7375    delete [] pIndex; 
     
    7577} 
    7678 
    77 void SQLStorage::Load () 
     79void SQLStorage::Load() 
    7880{ 
    79     uint32 maxi; 
    80     Field *fields; 
    81     QueryResult *result  = WorldDatabase.PQuery("SELECT MAX(%s) FROM %s",entry_field,table); 
    82     if(!result) 
    83     { 
    84         sLog.outError("Error loading %s table (not exist?)\n",table); 
    85         exit(1);                                            // Stop server at loading non exited table or not accessable table 
    86     } 
    87  
    88     maxi= (*result)[0].GetUInt32()+1; 
    89     delete result; 
    90  
    91     result = WorldDatabase.PQuery("SELECT COUNT(*) FROM %s",table); 
    92     if(result) 
    93     { 
    94         fields = result->Fetch(); 
    95         RecordCount=fields[0].GetUInt32(); 
    96         delete result; 
    97     } 
    98     else 
    99         RecordCount = 0; 
    100  
    101     result = WorldDatabase.PQuery("SELECT * FROM %s",table); 
    102  
    103     if(!result) 
    104     { 
    105         sLog.outError("%s table is empty!\n",table); 
    106         RecordCount = 0; 
    107         return; 
    108     } 
    109  
    110     uint32 recordsize=0; 
    111     uint32 offset=0; 
    112  
    113     if(iNumFields!=result->GetFieldCount()) 
    114     { 
    115         RecordCount = 0; 
    116         sLog.outError("Error in %s table, probably sql file format was updated (there should be %d fields in sql).\n",table,iNumFields); 
    117         delete result; 
    118         exit(1);                                            // Stop server at loading broken or non-compatiable table. 
    119     } 
    120  
    121     //get struct size 
    122     uint32 sc=0; 
    123     uint32 bo=0; 
    124     uint32 bb=0; 
    125     for(uint32 x=0;x<iNumFields;x++) 
    126         if(format[x]==FT_STRING) 
    127             ++sc; 
    128         else if (format[x]==FT_LOGIC) 
    129             ++bo; 
    130         else if (format[x]==FT_BYTE) 
    131             ++bb; 
    132     recordsize=(iNumFields-sc-bo-bb)*4+sc*sizeof(char*)+bo*sizeof(bool)+bb*sizeof(char); 
    133  
    134     char** newIndex=new char*[maxi]; 
    135     memset(newIndex,0,maxi*sizeof(char*)); 
    136  
    137     char * _data= new char[RecordCount *recordsize]; 
    138     uint32 count=0; 
    139     barGoLink bar( RecordCount ); 
    140     do 
    141     { 
    142         fields = result->Fetch(); 
    143         bar.step(); 
    144         char *p=(char*)&_data[recordsize*count]; 
    145         newIndex[fields[0].GetUInt32()]=p; 
    146  
    147         offset=0; 
    148         for(uint32 x=0;x<iNumFields;x++) 
    149             switch(format[x]) 
    150             { 
    151                 case FT_LOGIC: 
    152                     *((bool*)(&p[offset]))=(fields[x].GetUInt32()>0); 
    153                     offset+=sizeof(bool); 
    154                     break; 
    155                 case FT_BYTE: 
    156                     *((char*)(&p[offset]))=(fields[x].GetUInt8()); 
    157                     offset+=sizeof(char); 
    158                     break; 
    159                 case FT_INT: 
    160                     *((uint32*)(&p[offset]))=fields[x].GetUInt32(); 
    161                     offset+=sizeof(uint32); 
    162                     break; 
    163                 case FT_FLOAT: 
    164                     *((float*)(&p[offset]))=fields[x].GetFloat(); 
    165                     offset+=sizeof(float); 
    166                     break; 
    167                 case FT_STRING: 
    168                     char const* tmp = fields[x].GetString(); 
    169                     char* st; 
    170                     if(!tmp) 
    171                     { 
    172                         st=new char[1]; 
    173                         *st=0; 
    174                     } 
    175                     else 
    176                     { 
    177                         uint32 l=strlen(tmp)+1; 
    178                         st=new char[l]; 
    179                         memcpy(st,tmp,l); 
    180                     } 
    181                     *((char**)(&p[offset]))=st; 
    182                     offset+=sizeof(char*); 
    183                     break; 
    184             } 
    185         ++count; 
    186     }while( result->NextRow() ); 
    187  
    188     delete result; 
    189  
    190     pIndex =newIndex; 
    191     MaxEntry=maxi; 
    192     data=_data; 
     81    SQLStorageLoader loader; 
     82    loader.Load(*this); 
    19383} 
  • trunk/src/shared/Database/SQLStorage.h

    r102 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020 
     
    2727class SQLStorage 
    2828{ 
     29    template<class T> 
     30    friend struct SQLStorageLoaderBase; 
     31 
    2932    public: 
    3033 
    31         SQLStorage(const char*fmt,const char * _entry_field,const char * sqlname) 
     34        SQLStorage(const char* fmt, const char * _entry_field, const char * sqlname) 
    3235        { 
    33             format=fmt; 
    34             entry_field = _entry_field; 
    35             table=sqlname; 
    36             data=NULL; 
    37             pIndex=NULL; 
    38             iNumFields =strlen(fmt); 
    39             MaxEntry = 0; 
     36            src_format = fmt; 
     37            dst_format = fmt; 
     38            init(_entry_field, sqlname); 
    4039        } 
     40 
     41        SQLStorage(const char* src_fmt, const char* dst_fmt, const char * _entry_field, const char * sqlname) 
     42        { 
     43            src_format = src_fmt; 
     44            dst_format = dst_fmt; 
     45            init(_entry_field, sqlname); 
     46        } 
     47 
     48 
    4149        ~SQLStorage() 
    4250        { 
     
    5765        uint32 MaxEntry; 
    5866        uint32 iNumFields; 
     67 
    5968        void Load(); 
    6069        void Free(); 
     70 
    6171    private: 
     72        void init(const char * _entry_field, const char * sqlname) 
     73        { 
     74            entry_field = _entry_field; 
     75            table=sqlname; 
     76            data=NULL; 
     77            pIndex=NULL; 
     78            iNumFields = strlen(src_format); 
     79            MaxEntry = 0; 
     80        } 
     81 
    6282        char** pIndex; 
    6383 
    6484        char *data; 
    65         const char *format; 
     85        const char *src_format; 
     86        const char *dst_format; 
    6687        const char *table; 
    6788        const char *entry_field; 
    6889        //bool HasString; 
    6990}; 
     91 
     92template <class T> 
     93struct SQLStorageLoaderBase 
     94{ 
     95    public: 
     96        void Load(SQLStorage &storage); 
     97 
     98        template<class S, class D> 
     99            void convert(uint32 field_pos, S src, D &dst); 
     100        template<class S> 
     101            void convert_to_str(uint32 field_pos, S src, char * & dst); 
     102        template<class D> 
     103            void convert_from_str(uint32 field_pos, char * src, D& dst); 
     104        void convert_str_to_str(uint32 field_pos, char *src, char *&dst); 
     105 
     106    private: 
     107        template<class V> 
     108            void storeValue(V value, SQLStorage &store, char *p, int x, uint32 &offset); 
     109        void storeValue(char * value, SQLStorage &store, char *p, int x, uint32 &offset); 
     110}; 
     111 
     112struct SQLStorageLoader : public SQLStorageLoaderBase<SQLStorageLoader> 
     113{ 
     114}; 
     115 
    70116#endif 
  • trunk/src/shared/Database/dbcfile.cpp

    r102 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020 
  • trunk/src/shared/Database/dbcfile.h

    r102 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020 
  • trunk/src/shared/ProgressBar.cpp

    r102 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020 
  • trunk/src/shared/ProgressBar.h

    r102 r260  
    1111 * This program is distributed in the hope that it will be useful, 
    1212 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1414 * GNU General Public License for more details. 
    1515 * 
    1616 * You should have received a copy of the GNU General Public License 
    1717 * along with this program; if not, write to the Free Software 
    18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
     18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
    1919 */ 
    2020#ifndef TRINITYCORE_PROGRESSBAR_H