Moin,
ich bastel gerade an einem System und bin mir unsicher wegen einer Codestelle.
Mein Ziel ist es für jeden Skill der Lehre des Spielers einen Eintrag in einer neuen Tabelle player_skill_stats zu schreiben. In dieser Tabelle wird letztendes gespeichert wie viel Damage mit dem Skill insgesamt verursacht wurde, wei viele gegner durch z.B. Sausen betäubt wurden.
Um die records für jeden Spieler zu initialisieren habe ich insgesamt 6 Funktionen. 1x Management (gibt es Records in der Tabelle zu dem Spieler, dann überspringe die Initialisierungsfunktion, ansonsten schreibe für jeden Skill und Attribut, z.B. Damage, Stun, Slow, einen neuen Record) welche im player load ausgeführt wird.
Bei den 5 Initialiserungsfunktionen (jeweils 1 pro Rasse) bin ich mir jetzt aber nicht sicher ob ich den Code noch weiter optimieren kann bzw. zusammenfassen kann.
Ich gebe hier mal das Beispiel für die Initialisierungsfunktion des Kriegers:
- void DBManager::InitWarriorSkillStats(LPCHARACTER player)
- {
- const DWORD* pSkill = SkillList[player->GetJob()][player->GetSkillGroup() - 1];
- for (int i = 0; i < SKILL_COUNT; ++i)
- {
- char szQueryInsert[1024];
- switch (pSkill[i])
- {
- case 1:
- case 2:
- case 16:
- case 17:
- snprintf(
- szQueryInsert,
- sizeof(szQueryInsert),
- "INSERT INTO player_skill_stats VALUES(%u, %u, %u, %u)",
- player->GetPlayerID(),
- pSkill[i],
- STAT_TYPE_DAMAGE,
- 0);
- break;
- case 3:
- case 18:
- case 20:
- snprintf(
- szQueryInsert,
- sizeof(szQueryInsert),
- "INSERT INTO player_skill_stats VALUES(%u, %u, %u, %u),(%u, %u, %u, %u)",
- player->GetPlayerID(),
- pSkill[i],
- STAT_TYPE_DAMAGE,
- 0,
- player->GetPlayerID(),
- pSkill[i],
- STAT_TYPE_STUN,
- 0);
- break;
- case 4:
- case 5:
- case 19:
- //still need implementation idea
- break;
- default:
- break;
- }
- SQLMsg* pMsgInsert = (m_sql_direct.DirectQuery(szQueryInsert));
- if (!pMsgInsert)
- {
- sys_err("Error inserting player skill stats.");
- delete pMsgInsert;
- }
- }
- }
Die SkillList sieht wie folgt aus
- const int SKILL_COUNT = 6;
- static const DWORD SkillList[JOB_MAX_NUM][SKILL_GROUP_MAX_NUM][SKILL_COUNT] =
- {
- { { 1, 2, 3, 4, 5, 6 }, { 16, 17, 18, 19, 20, 21 } },
- { { 31, 32, 33, 34, 35, 36 }, { 46, 47, 48, 49, 50, 51 } },
- { { 61, 62, 63, 64, 65, 66 }, { 76, 77, 78, 79, 80, 81 } },
- { { 91, 92, 93, 94, 95, 96 }, { 106,107,108,109,110,111 } },
- #ifdef ENABLE_WOLFMAN_CHARACTER
- { { 170,171,172,173,174,175 }, { 0, 0, 0, 0, 0, 0 } },
- #endif
- };
Der Code in der Init Funktion wiederholt sich jetzt so oder so ähnlich pro Rasse.
Wie seht ihr das? Gibt es da Potential?