void LoadAbilitiesList() { // TODO: добавить поле message в таблицу memset(PAbilityList, 0, sizeof(PAbilityList)); const int8* Query = "SELECT " "abilityId," "IFNULL(min_id,0)," "name," "job," "level," "validTarget," "recastTime," "message1, " "message2, " "animation," "animationTime," "castTime," "actionType," "`range`," "isAOE," "recastId," "CE," "VE, " "meritModID, " "addType, " "required_expansion " "FROM abilities LEFT JOIN (SELECT mob_skill_name, MIN(mob_skill_id) AS min_id " "FROM mob_skills GROUP BY mob_skill_name) mob_skills_1 ON " "abilities.name = mob_skills_1.mob_skill_name " "WHERE job < %u AND abilityId < %u " "ORDER BY job, level ASC"; int32 ret = Sql_Query(SqlHandle, Query, MAX_JOBTYPE, MAX_ABILITY_ID); if (ret != SQL_ERROR && Sql_NumRows(SqlHandle) != 0) { while (Sql_NextRow(SqlHandle) == SQL_SUCCESS) { int8* expansionCode; Sql_GetData(SqlHandle, 20, &expansionCode, nullptr); if (luautils::IsExpansionEnabled(expansionCode) == false) { continue; } CAbility* PAbility = new CAbility(Sql_GetIntData(SqlHandle, 0)); PAbility->setMobSkillID(Sql_GetIntData(SqlHandle, 1)); PAbility->setName(Sql_GetData(SqlHandle, 2)); PAbility->setJob((JOBTYPE)Sql_GetIntData(SqlHandle, 3)); PAbility->setLevel(Sql_GetIntData(SqlHandle, 4)); PAbility->setValidTarget(Sql_GetIntData(SqlHandle, 5)); PAbility->setRecastTime(Sql_GetIntData(SqlHandle, 6)); PAbility->setMessage(Sql_GetIntData(SqlHandle, 7)); //PAbility->setMessage(Sql_GetIntData(SqlHandle,8)); PAbility->setAnimationID(Sql_GetIntData(SqlHandle, 9)); PAbility->setAnimationTime(std::chrono::milliseconds(Sql_GetIntData(SqlHandle, 10))); PAbility->setCastTime(std::chrono::milliseconds(Sql_GetIntData(SqlHandle, 11))); PAbility->setActionType(static_cast<ACTIONTYPE>(Sql_GetUIntData(SqlHandle, 12))); PAbility->setRange(Sql_GetFloatData(SqlHandle, 13)); PAbility->setAOE(Sql_GetIntData(SqlHandle, 14)); PAbility->setRecastId(Sql_GetIntData(SqlHandle, 15)); PAbility->setCE(Sql_GetIntData(SqlHandle, 16)); PAbility->setVE(Sql_GetIntData(SqlHandle, 17)); PAbility->setMeritModID(Sql_GetIntData(SqlHandle, 18)); PAbility->setAddType(Sql_GetUIntData(SqlHandle, 19)); PAbilityList[PAbility->getID()] = PAbility; PAbilitiesList[PAbility->getJob()].push_back(PAbility); } } const int8* Query2 = "SELECT recastId, job, level, maxCharges, chargeTime, meritModId FROM abilities_charges ORDER BY job, level ASC;"; ret = Sql_Query(SqlHandle, Query2); if (ret != SQL_ERROR && Sql_NumRows(SqlHandle) != 0) { while (Sql_NextRow(SqlHandle) == SQL_SUCCESS) { Charge_t* PCharge = new Charge_t; PCharge->ID = Sql_GetUIntData(SqlHandle, 0); PCharge->job = (JOBTYPE)Sql_GetUIntData(SqlHandle, 1); PCharge->level = Sql_GetUIntData(SqlHandle, 2); PCharge->maxCharges = Sql_GetUIntData(SqlHandle, 3); PCharge->chargeTime = Sql_GetUIntData(SqlHandle, 4); PCharge->merit = Sql_GetUIntData(SqlHandle, 5); PChargesList.push_back(PCharge); } } }