- Katılım
- 6 Ağu 2018
- Konular
- 2
- Mesajlar
- 2
- Online süresi
- 22h 24m
- Reaksiyon Skoru
- 13
- Altın Konu
- 0
- TM Yaşı
- 7 Yıl 10 Ay 5 Gün
- Başarım Puanı
- 53
- Yaş
- 26
- MmoLira
- 960
- DevLira
- 3
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
Buda bende olsun.
- Owsap 4.9.7 uyumlu
- Definelerinizi karstilastirin.
- Wolfman sorunsuz eklendi
- #ifdef ENABLE_QUIVER_SYSTEM: (Line 293) düzeltildi.
- #ifdef ENABLE_SPHAERA_SYSTEM: silindi.
Owsapin Filesini kullalanlar icin: constInfo2.py ac bu defini EXTENDED_LOADING_GUAGE False olarak ver. Yoksa yavas calisir.
Source File:
Kod:#include "StdAfx.h" #ifdef ENABLE_CPP_PSM #include "PythonPlayerSettingsModule.h" #include "InstanceBase.h" #include "../EffectLib/EffectManager.h" #include "PythonSkill.h" #include "../gamelib/RaceManager.h" #include "PythonItem.h" CRaceMotionData& pkMotionManager = CRaceMotionData(); static const DWORD GUILD_SKILL_DRAGONBLOOD = pkMotionManager.NAME_SKILL + 101; static const DWORD GUILD_SKILL_DRAGONBLESS = pkMotionManager.NAME_SKILL + 102; static const DWORD GUILD_SKILL_BLESSARMOR = pkMotionManager.NAME_SKILL + 103; static const DWORD GUILD_SKILL_SPPEDUP = pkMotionManager.NAME_SKILL + 104; static const DWORD GUILD_SKILL_DRAGONWRATH = pkMotionManager.NAME_SKILL + 105; static const DWORD GUILD_SKILL_MAGICUP = pkMotionManager.NAME_SKILL + 106; static const DWORD HORSE_SKILL_WILDATTACK = pkMotionManager.NAME_SKILL + 121; static const DWORD HORSE_SKILL_CHARGE = pkMotionManager.NAME_SKILL + 122; static const DWORD HORSE_SKILL_SPLASH = pkMotionManager.NAME_SKILL + 123; const bool CPlayerSettingsModule::LoadInitData() { CInstanceBase & pkBase = CInstanceBase(); static const std::vector<TEffect> m_vecEffectData = { { pkBase.EFFECT_DUST, "", "d:/ymir work/effect/etc/dust/dust.mse" } , { pkBase.EFFECT_HORSE_DUST, "", "d:/ymir work/effect/etc/dust/running_dust.mse" }, { pkBase.EFFECT_HIT, "", "d:/ymir work/effect/hit/blow_1/blow_1_low.mse" }, { pkBase.EFFECT_HPUP_RED, "", "d:/ymir work/effect/etc/recuperation/drugup_red.mse" }, { pkBase.EFFECT_SPUP_BLUE, "", "d:/ymir work/effect/etc/recuperation/drugup_blue.mse" }, { pkBase.EFFECT_SPEEDUP_GREEN, "", "d:/ymir work/effect/etc/recuperation/drugup_green.mse" }, { pkBase.EFFECT_DXUP_PURPLE, "", "d:/ymir work/effect/etc/recuperation/drugup_purple.mse" }, { pkBase.EFFECT_AUTO_HPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_red.mse" }, { pkBase.EFFECT_AUTO_SPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_blue.mse" }, { pkBase.EFFECT_RAMADAN_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item1.mse" }, { pkBase.EFFECT_HALLOWEEN_CANDY_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item2.mse" }, { pkBase.EFFECT_HAPPINESS_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item3.mse" }, { pkBase.EFFECT_LOVE_PENDANT_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item4.mse" }, #ifdef ENABLE_ACCE_COSTUME_SYSTEM { pkBase.EFFECT_ACCE_SUCESS_ABSORB, "", "d:/ymir work/effect/etc/buff/buff_item6.mse" }, { pkBase.EFFECT_ACCE_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item7.mse" }, #endif { pkBase.EFFECT_EASTER_CANDY_EQIP, "", "d:/ymir work/effect/etc/buff/buff_item8.mse" }, { pkBase.EFFECT_PENETRATE, "Bip01", "d:/ymir work/effect/hit/gwantong.mse" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_BLOCK, {"", "d:/ymir work/effect/etc/" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DODGE, {"", "d:/ymir work/effect/etc/" }, { pkBase.EFFECT_FIRECRACKER, "", "d:/ymir work/effect/etc/firecracker/newyear_firecracker.mse" }, { pkBase.EFFECT_SPIN_TOP, "", "d:/ymir work/effect/etc/firecracker/paing_i.mse" }, { pkBase.EFFECT_SELECT, "", "d:/ymir work/effect/etc/click/click_select.mse" }, { pkBase.EFFECT_TARGET, "", "d:/ymir work/effect/etc/click/click_glow_select.mse" }, { pkBase.EFFECT_STUN, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun.mse" }, { pkBase.EFFECT_CRITICAL, "Bip01 R Hand", "d:/ymir work/effect/hit/critical.mse" }, //{ pkBase.EFFECT_PICK, "", "d:/ymir work/effect/etc/click/click.mse" }, Noteme { pkBase.EFFECT_DAMAGE_TARGET, "", "d:/ymir work/effect/affect/damagevalue/target.mse" }, { pkBase.EFFECT_DAMAGE_NOT_TARGET, "", "d:/ymir work/effect/affect/damagevalue/nontarget.mse" }, { pkBase.EFFECT_DAMAGE_SELFDAMAGE, "", "d:/ymir work/effect/affect/damagevalue/damage.mse" }, { pkBase.EFFECT_DAMAGE_SELFDAMAGE2, "", "d:/ymir work/effect/affect/damagevalue/damage_1.mse" }, { pkBase.EFFECT_DAMAGE_POISON, "", "d:/ymir work/effect/affect/damagevalue/poison.mse" }, { pkBase.EFFECT_DAMAGE_MISS, "", "d:/ymir work/effect/affect/damagevalue/miss.mse" }, { pkBase.EFFECT_DAMAGE_TARGETMISS, "", "d:/ymir work/effect/affect/damagevalue/target_miss.mse" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_CRITICAL, "", "d:/ymir work/effect/affect/damagevalue/critical.mse" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SUCCESS, "", "season1/effect/success.mse" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_FAIL, "", "season1/effect/fail.mse" }, { pkBase.EFFECT_LEVELUP_ON_14_FOR_GERMANY, "","season1/effect/paymessage_warning.mse" }, { pkBase.EFFECT_LEVELUP_UNDER_15_FOR_GERMANY, "", "season1/effect/paymessage_decide.mse" }, { pkBase.EFFECT_PERCENT_DAMAGE1, "", "d:/ymir work/effect/hit/percent_damage1.mse" }, { pkBase.EFFECT_PERCENT_DAMAGE2, "", "d:/ymir work/effect/hit/percent_damage2.mse" }, { pkBase.EFFECT_PERCENT_DAMAGE3, "", "d:/ymir work/effect/hit/percent_damage3.mse" }, { pkBase.EFFECT_THUNDER_AREA, "", "D:/ymir work/effect/monster/light_emissive3.mse" }, { pkBase.EFFECT_THUNDER, "", "D:/ymir work/effect/monster/yellow_tigerman_24_1.mse" }, { pkBase.EFFECT_HEAL, "", "D:/ymir work/pc/shaman/effect/jeongeop_2.mse" }, { pkBase.EFFECT_CAPE_OF_COURAGE, "", "D:/ymir work/effect/etc/buff/buff_item9.mse" }, { pkBase.EFFECT_CHOCOLATE_PENDANT, "", "D:/ymir work/effect/etc/buff/buff_item10.mse" }, { pkBase.EFFECT_PEPSI_EVENT, "", "D:/ymir work/effect/etc/buff/buff_item11.mse" }, { pkBase.EFFECT_DRAGONLAIR_STONE_UNBEATABLE_1, "", "d:/ymir work/effect/monster2/redd_moojuk.mse" }, { pkBase.EFFECT_DRAGONLAIR_STONE_UNBEATABLE_2, "", "d:/ymir work/effect/monster2/redd_moojuk.mse" }, { pkBase.EFFECT_DRAGONLAIR_STONE_UNBEATABLE_3, "", "d:/ymir work/effect/monster2/redd_moojuk_blue.mse" }, { pkBase.EFFECT_DRAGONLAIR_STONE_UNBEATABLE_4, "", "d:/ymir work/effect/monster2/redd_moojuk_green.mse" }, { pkBase.EFFECT_BATTLE_POTION, "", "D:/ymir work/effect/etc/buff/buff_item12.mse" }, { pkBase.EFFECT_NAZAR_PENDANT, "", "D:/ymir work/effect/etc/buff/buff_item13.mse" }, { pkBase.EFFECT_GUARDIAN_PENDANT, "", "D:/ymir work/effect/etc/buff/buff_item14.mse" }, { pkBase.EFFECT_FLOWER_EVENT, "", "d:/ymir work/effect/etc/buff/buff_item15_flower.mse" }, { pkBase.EFFECT_GEM_PENDANT, "", "d:/ymir work/effect/etc/buff/buff_item16.mse" }, }; static std::vector<TRaceData> m_vecRaceData = { { RACE_WARRIOR_M, "warrior_m.msm", "d:/ymir work/pc/warrior/intro/" }, { RACE_WARRIOR_W, "warrior_w.msm", "d:/ymir work/pc2/warrior/intro/" }, { RACE_ASSASSIN_W, "assassin_w.msm", "d:/ymir work/pc/assassin/intro/" }, { RACE_ASSASSIN_M, "assassin_m.msm", "d:/ymir work/pc2/assassin/intro/" }, { RACE_SURA_M, "sura_m.msm", "d:/ymir work/pc/sura/intro/" }, { RACE_SURA_W, "sura_w.msm", "d:/ymir work/pc2/sura/intro/" }, { RACE_SHAMAN_W, "shaman_w.msm", "d:/ymir work/pc/shaman/intro/" }, { RACE_SHAMAN_M, "shaman_m.msm", "d:/ymir work/pc2/shaman/intro/" }, { RACE_WOLFMAN_M, "wolfman_m.msm", "d:/ymir work/pc3/wolfman/intro/" }, }; std::vector<SMotion> m_vecMotion = { { pkMotionManager.NAME_INTRO_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_INTRO_SELECTED, "selected.msa", 0 }, { pkMotionManager.NAME_INTRO_NOT_SELECTED, "not_selected.msa", 0 }, }; pkBase.SetDustGap(DUST_GAP); pkBase.SetHorseDustGap(HORSE_DUST_GAP); for (const auto& it : m_vecEffectData) { pkBase.RegisterEffect(it.uiType, it.stBone, it.stEffect, true); } CRaceManager& pkManager = CRaceManager::Instance(); char szFileName[FILE_MAX_NUM]; for (auto& it : m_vecRaceData) { pkManager.CreateRace(it.dwRace); pkManager.SelectRace(it.dwRace); CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; if (!pRaceData->LoadRaceData(it.stMSM)) { return false; } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it2 : m_vecMotion) { snprintf(szFileName, sizeof(szFileName), "%s%s", it.stIntroMotion, it2.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it2.wMotionIndex, szFileName, it2.byPercentage); } } return true; } const bool CPlayerSettingsModule::LoadGameEffect() { CInstanceBase& pkBase = CInstanceBase(); CFlyingManager& pkFly = CFlyingManager::Instance(); char GM_MARK[FILE_MAX_NUM]; snprintf(GM_MARK, sizeof(GM_MARK), "%s/effect/gm.mse", LocaleService_GetLocalePath()); std::vector<TEffect> m_vecEffectData = { { pkBase.EFFECT_SPAWN_APPEAR, "Bip01", "d:/ymir work/effect/etc/appear_die/monster_appear.mse" }, { pkBase.EFFECT_SPAWN_DISAPPEAR, "Bip01", "d:/ymir work/effect/etc/appear_die/monster_die.mse" }, { pkBase.EFFECT_FLAME_ATTACK, "equip_right_hand", "d:/ymir work/effect/hit/blow_flame/flame_3_weapon.mse" }, { pkBase.EFFECT_FLAME_HIT, "", "d:/ymir work/effect/hit/blow_flame/flame_3_blow.mse" }, { pkBase.EFFECT_FLAME_ATTACH, "", "d:/ymir work/effect/hit/blow_flame/flame_3_body.mse" }, { pkBase.EFFECT_ELECTRIC_ATTACK, "equip_right", "d:/ymir work/effect/hit/blow_electric/light_1_weapon.mse" }, { pkBase.EFFECT_ELECTRIC_HIT, "", "d:/ymir work/effect/hit/blow_electric/light_1_blow.mse" }, { pkBase.EFFECT_ELECTRIC_ATTACH, "", "d:/ymir work/effect/hit/blow_electric/light_1_body.mse" }, //{ pkBase.EFFECT_GYEONGGONG_BOOM, "Bip01", "d:/ymir work/effect/hit/gyeonggong_boom.mse" }, { pkBase.EFFECT_LEVELUP, "", "d:/ymir work/effect/etc/levelup_1/level_up.mse" }, { pkBase.EFFECT_SKILLUP, "", "d:/ymir work/effect/etc/skillup/skillup_1.mse" }, { pkBase.EFFECT_EMPIRE + 1, "Bip01", "d:/ymir work/effect/etc/empire/empire_A.mse" }, { pkBase.EFFECT_EMPIRE + 2, "Bip01", "d:/ymir work/effect/etc/empire/empire_B.mse" }, { pkBase.EFFECT_EMPIRE + 3, "Bip01", "d:/ymir work/effect/etc/empire/empire_C.mse" }, { pkBase.EFFECT_WEAPON + 1, "equip_right_hand", "d:/ymir work/pc/warrior/effect/geom_sword_loop.mse" }, { pkBase.EFFECT_WEAPON + 2, "equip_right_hand", "d:/ymir work/pc/warrior/effect/geom_spear_loop.mse" }, { pkBase.EFFECT_AFFECT + 3, "Bip01", "d:/ymir work/effect/hit/blow_poison/poison_loop.mse" }, { pkBase.EFFECT_AFFECT + 42, "Bip01", "d:/ymir work/effect/hit/blow_poison/bleeding_loop.mse" }, { pkBase.EFFECT_AFFECT + 4, "", "d:/ymir work/effect/affect/slow.mse" }, { pkBase.EFFECT_AFFECT + 5, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun_loop.mse" }, { pkBase.EFFECT_AFFECT + 6, "", "d:/ymir work/effect/etc/ready/ready.mse" }, //{ pkBase.EFFECT_AFFECT+8, "", "d:/ymir work/guild/effect/10_construction.mse" }, //{ pkBase.EFFECT_AFFECT+9, "", "d:/ymir work/guild/effect/20_construction.mse" }, //{ pkBase.EFFECT_AFFECT+10, "", "d:/ymir work/guild/effect/20_upgrade.mse" }, { pkBase.EFFECT_AFFECT + 16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse" }, { pkBase.EFFECT_AFFECT + 17, "", "d:/ymir work/pc/assassin/effect/gyeonggong_loop.mse" }, { pkBase.EFFECT_AFFECT + 19, "Bip01 R Finger2", "d:/ymir work/pc/sura/effect/gwigeom_loop.mse" }, { pkBase.EFFECT_AFFECT + 20, "", "d:/ymir work/pc/sura/effect/fear_loop.mse" }, { pkBase.EFFECT_AFFECT + 21, "", "d:/ymir work/pc/sura/effect/jumagap_loop.mse" }, { pkBase.EFFECT_AFFECT + 22, "", "d:/ymir work/pc/shaman/effect/3hosin_loop.mse" }, { pkBase.EFFECT_AFFECT + 23, "", "d:/ymir work/pc/shaman/effect/boho_loop.mse" }, { pkBase.EFFECT_AFFECT + 24, "", "d:/ymir work/pc/shaman/effect/10kwaesok_loop.mse" }, { pkBase.EFFECT_AFFECT + 25, "", "d:/ymir work/pc/sura/effect/heuksin_loop.mse" }, { pkBase.EFFECT_AFFECT + 26, "", "d:/ymir work/pc/sura/effect/muyeong_loop.mse" }, // { pkBase.EFFECT_AFFECT + 28, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop.mse" }, { pkBase.EFFECT_AFFECT + 29, "Bip01 R Hand", "d:/ymir work/pc/shaman/effect/6gicheon_hand.mse" }, { pkBase.EFFECT_AFFECT + 30, "Bip01 L Hand", "d:/ymir work/pc/shaman/effect/jeungryeok_hand.mse" }, { pkBase.EFFECT_AFFECT + 32, "Bip01 Head", "d:/ymir work/pc/sura/effect/pabeop_loop.mse" }, { pkBase.EFFECT_AFFECT + 33, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse" }, { pkBase.EFFECT_AFFECT + 35, "", "d:/ymir work/effect/etc/guild_war_flag/flag_red.mse" }, { pkBase.EFFECT_AFFECT + 36, "", "d:/ymir work/effect/etc/guild_war_flag/flag_blue.mse" }, { pkBase.EFFECT_AFFECT + 37, "", "d:/ymir work/effect/etc/guild_war_flag/flag_yellow.mse" }, { pkBase.EFFECT_AFFECT + 43, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop_w.mse" }, { pkBase.EFFECT_AFFECT + 44, "", "d:/ymir work/pc3/common/effect/gyeokgongjang_loop_w.mse" }, { pkBase.EFFECT_REFINED + 1, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7.mse" }, { pkBase.EFFECT_REFINED + 2, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8.mse" }, { pkBase.EFFECT_REFINED + 3, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9.mse" }, { pkBase.EFFECT_REFINED + 4, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7_b.mse" }, { pkBase.EFFECT_REFINED + 5, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_8_b.mse" }, { pkBase.EFFECT_REFINED + 6, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_9_b.mse" }, { pkBase.EFFECT_REFINED + 7, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7_f.mse" }, { pkBase.EFFECT_REFINED + 8, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8_f.mse" }, { pkBase.EFFECT_REFINED + 9, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9_f.mse" }, { pkBase.EFFECT_REFINED + 10, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7_s.mse" }, { pkBase.EFFECT_REFINED + 11, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8_s.mse" }, { pkBase.EFFECT_REFINED + 12, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9_s.mse" }, { pkBase.EFFECT_REFINED + 13, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7_s.mse" }, { pkBase.EFFECT_REFINED + 14, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_8_s.mse" }, { pkBase.EFFECT_REFINED + 15, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_9_s.mse" }, { pkBase.EFFECT_REFINED + 16, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7_w.mse" }, { pkBase.EFFECT_REFINED + 17, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8_w.mse" }, { pkBase.EFFECT_REFINED + 18, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9_w.mse" }, { pkBase.EFFECT_REFINED + 19, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7_w.mse" }, { pkBase.EFFECT_REFINED + 20, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_8_w.mse" }, { pkBase.EFFECT_REFINED + 21, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_9_w.mse" }, { pkBase.EFFECT_REFINED + 22, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_7.mse" }, { pkBase.EFFECT_REFINED + 23, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_8.mse" }, { pkBase.EFFECT_REFINED + 24, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_9.mse" }, { pkBase.EFFECT_REFINED + 25, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-1.mse" }, { pkBase.EFFECT_REFINED + 26, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse" }, { pkBase.EFFECT_REFINED + 27, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-5-1.mse" }, { pkBase.EFFECT_REFINED + 28, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-5_jin.mse" }, #ifdef ENABLE_ACCE_COSTUME_SYSTEM { pkBase.EFFECT_REFINED + 29, "Bip01", "d:/ymir work/pc/common/effect/armor/acc_01.mse" }, #endif { pkBase.EFFECT_REFINED + 30, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_7th_01.mse" }, { pkBase.EFFECT_REFINED + 31, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7th.mse" }, { pkBase.EFFECT_REFINED + 32, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7th_b.mse" }, { pkBase.EFFECT_REFINED + 33, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7th_f.mse" }, { pkBase.EFFECT_REFINED + 34, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7th_s.mse" }, { pkBase.EFFECT_REFINED + 35, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7th_s.mse" }, { pkBase.EFFECT_REFINED + 36, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7th_w.mse" }, { pkBase.EFFECT_REFINED + 37, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7th_w.mse" }, { pkBase.EFFECT_EMOTICON + 0, "", "d:/ymir work/effect/etc/emoticon/sweat.mse" }, { pkBase.EFFECT_EMOTICON + 1, "", "d:/ymir work/effect/etc/emoticon/money.mse" }, { pkBase.EFFECT_EMOTICON + 2, "", "d:/ymir work/effect/etc/emoticon/happy.mse" }, { pkBase.EFFECT_EMOTICON + 3, "", "d:/ymir work/effect/etc/emoticon/love_s.mse" }, { pkBase.EFFECT_EMOTICON + 4, "", "d:/ymir work/effect/etc/emoticon/love_l.mse" }, { pkBase.EFFECT_EMOTICON + 5, "", "d:/ymir work/effect/etc/emoticon/angry.mse" }, { pkBase.EFFECT_EMOTICON + 6, "", "d:/ymir work/effect/etc/emoticon/aha.mse" }, { pkBase.EFFECT_EMOTICON + 7, "", "d:/ymir work/effect/etc/emoticon/gloom.mse" }, { pkBase.EFFECT_EMOTICON + 8, "", "d:/ymir work/effect/etc/emoticon/sorry.mse" }, { pkBase.EFFECT_EMOTICON + 9, "", "d:/ymir work/effect/etc/emoticon/!_mix_back.mse" }, { pkBase.EFFECT_EMOTICON + 10, "", "d:/ymir work/effect/etc/emoticon/question.mse" }, { pkBase.EFFECT_EMOTICON + 11, "", "d:/ymir work/effect/etc/emoticon/fish.mse" }, { pkBase.EFFECT_EMOTICON + 12, "", "d:/ymir work/effect/etc/emoticon/charging.mse" }, { pkBase.EFFECT_EMOTICON + 13, "", "d:/ymir work/effect/etc/emoticon/nosay.mse" }, { pkBase.EFFECT_EMOTICON + 14, "", "d:/ymir work/effect/etc/emoticon/weather1.mse" }, { pkBase.EFFECT_EMOTICON + 15, "", "d:/ymir work/effect/etc/emoticon/weather2.mse" }, { pkBase.EFFECT_EMOTICON + 16, "", "d:/ymir work/effect/etc/emoticon/weather3.mse" }, { pkBase.EFFECT_EMOTICON + 17, "", "d:/ymir work/effect/etc/emoticon/hungry.mse" }, { pkBase.EFFECT_EMOTICON + 18, "", "d:/ymir work/effect/etc/emoticon/siren.mse" }, { pkBase.EFFECT_EMOTICON + 19, "", "d:/ymir work/effect/etc/emoticon/letter.mse" }, { pkBase.EFFECT_EMOTICON + 20, "", "d:/ymir work/effect/etc/emoticon/call.mse" }, { pkBase.EFFECT_EMOTICON + 21, "", "d:/ymir work/effect/etc/emoticon/celebration.mse" }, { pkBase.EFFECT_EMOTICON + 22, "", "d:/ymir work/effect/etc/emoticon/alcohol.mse" }, { pkBase.EFFECT_EMOTICON + 23, "", "d:/ymir work/effect/etc/emoticon/busy.mse" }, { pkBase.EFFECT_EMOTICON + 24, "", "d:/ymir work/effect/etc/emoticon/whirl.mse" }, { pkBase.EFFECT_AFFECT + 49, "", "d:/ymir work/effect/etc/soul/soul_red_001.mse" }, { pkBase.EFFECT_AFFECT + 50, "", "d:/ymir work/effect/etc/soul/soul_blue_001.mse" }, { pkBase.EFFECT_AFFECT + 51, "", "d:/ymir work/effect/etc/soul/soul_mix_001.mse" }, }; enum { FLY_NONE, FLY_EXP, FLY_HP_MEDIUM, FLY_HP_BIG, FLY_SP_SMALL, FLY_SP_MEDIUM, FLY_SP_BIG, FLY_FIREWORK1, FLY_FIREWORK2, FLY_FIREWORK3, FLY_FIREWORK4, FLY_FIREWORK5, FLY_FIREWORK6, FLY_FIREWORK_XMAS, FLY_CHAIN_LIGHTNING, FLY_HP_SMALL, FLY_SKILL_MUYEONG, #ifdef ENABLE_QUIVER_SYSTEM FLY_QUIVER_ATTACK_NORMAL, #endif }; std::vector<SFly> m_vecFlyData = { { FLY_EXP, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_yellow_small2.msf" }, { FLY_HP_MEDIUM, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_small.msf" }, { FLY_HP_BIG, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_big.msf" }, { FLY_SP_SMALL, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_warrior_small.msf" }, { FLY_SP_MEDIUM, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_small.msf" }, { FLY_SP_BIG, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_big.msf" }, { FLY_FIREWORK1, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_1.msf" }, { FLY_FIREWORK2, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_2.msf" }, { FLY_FIREWORK3, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_3.msf" }, { FLY_FIREWORK4, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_4.msf" }, { FLY_FIREWORK5, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_5.msf" }, { FLY_FIREWORK6, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_6.msf" }, { FLY_FIREWORK_XMAS, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_xmas.msf" }, { FLY_CHAIN_LIGHTNING, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/shaman/effect/pokroe.msf" }, { FLY_HP_SMALL, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_smallest.msf" }, { FLY_SKILL_MUYEONG, pkFly.INDEX_FLY_TYPE_AUTO_FIRE, "d:/ymir work/pc/sura/effect/muyeong_fly.msf" }, #ifdef ENABLE_QUIVER_SYSTEM { FLY_QUIVER_ATTACK_NORMAL, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/assassin/effect/arrow_02.msf" }, #endif }; // GM_EFFECT TEffect effect; effect.uiType = pkBase.EFFECT_AFFECT + 0; memcpy(effect.stBone, "Bip01", sizeof(effect.stBone)); memcpy(effect.stEffect, GM_MARK, sizeof(effect.stEffect)); m_vecEffectData.push_back(effect); // GM_EFFECT for (const auto& it : m_vecEffectData) { pkBase.RegisterEffect(it.uiType, it.stBone, it.stEffect, false); } for (const auto& it : m_vecFlyData) { pkFly.RegisterIndexedFlyData(it.dwIndex, it.byType, it.stName); } return true; } const bool CPlayerSettingsModule::RegisterEmotionAnis(char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecEmotion = { { pkMotionManager.NAME_CLAP, "clap.msa", 0 }, { pkMotionManager.NAME_CHEERS_1, "cheers_1.msa", 0 }, { pkMotionManager.NAME_CHEERS_2, "cheers_2.msa", 0 }, { pkMotionManager.NAME_DANCE_1, "dance_1.msa", 0 }, { pkMotionManager.NAME_DANCE_2, "dance_2.msa", 0 }, { pkMotionManager.NAME_DANCE_3, "dance_3.msa", 0 }, { pkMotionManager.NAME_DANCE_4, "dance_4.msa", 0 }, { pkMotionManager.NAME_DANCE_5, "dance_5.msa", 0 }, { pkMotionManager.NAME_DANCE_6, "dance_6.msa", 0 }, { pkMotionManager.NAME_CONGRATULATION, "congratulation.msa", 0 }, { pkMotionManager.NAME_FORGIVE, "forgive.msa", 0 }, { pkMotionManager.NAME_ANGRY, "angry.msa", 0 }, { pkMotionManager.NAME_ATTRACTIVE, "attractive.msa", 0 }, { pkMotionManager.NAME_SAD, "sad.msa", 0 }, { pkMotionManager.NAME_SHY, "shy.msa", 0 }, { pkMotionManager.NAME_CHEERUP, "cheerup.msa", 0 }, { pkMotionManager.NAME_BANTER, "banter.msa", 0 }, { pkMotionManager.NAME_JOY, "joy.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_WARRIOR, "french_kiss_with_warrior.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_ASSASSIN, "french_kiss_with_assassin.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_SURA, "french_kiss_with_sura.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_SHAMAN, "french_kiss_with_shaman.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_WOLFMAN, "french_kiss_with_wolfman.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_WARRIOR, "kiss_with_warrior.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_ASSASSIN, "kiss_with_assassin.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_SURA, "kiss_with_sura.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_SHAMAN, "kiss_with_shaman.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_WOLFMAN, "kiss_with_wolfman.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_WARRIOR, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_ASSASSIN, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_SURA, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_SHAMAN, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_WOLFMAN, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_WARRIOR, "slap_hurt.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_ASSASSIN, "slap_hurt.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_SURA, "slap_hurt.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_SHAMAN, "slap_hurt.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_WOLFMAN, "slap_hurt.msa", 0 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecEmotion) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "action/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->RegisterMotionMode(pkMotionManager.MODE_WEDDING_DRESS); for (const auto& it : m_vecEmotion) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "action/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_WEDDING_DRESS, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecEmotionDress = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "walk.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_WEDDING_DRESS); for (const auto& it : m_vecEmotionDress) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "wedding/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_WEDDING_DRESS, it.wMotionIndex, szFileName, it.byPercentage); } return true; } const bool CPlayerSettingsModule::LoadGeneralMotion(char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecBasicMotion = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_DAMAGE_FLYING, "damage_flying.msa", 0 }, { pkMotionManager.NAME_STAND_UP, "falling_stand.msa", 0 }, { pkMotionManager.NAME_DAMAGE_FLYING_BACK, "back_damage_flying.msa", 0 }, { pkMotionManager.NAME_STAND_UP_BACK, "back_falling_stand.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { pkMotionManager.NAME_DIG, "dig.msa", 0 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecBasicMotion) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } return true; } const bool CPlayerSettingsModule::LoadNewGeneralMotion(char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecBasicMotion = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "front_damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "front_damage1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "back_damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "back_damage1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_FLYING, "front_damage_flying.msa", 0 }, { pkMotionManager.NAME_STAND_UP, "front_falling_standup.msa", 0 }, { pkMotionManager.NAME_DAMAGE_FLYING_BACK, "back_damage_flying.msa", 0 }, { pkMotionManager.NAME_STAND_UP_BACK, "back_falling_standup.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { pkMotionManager.NAME_DIG, "dig.msa", 0 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecBasicMotion) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } return true; } const bool CPlayerSettingsModule::LoadGameWarrior(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; if (!pRaceData->SetMotionRandomWeight(pkMotionManager.MODE_GENERAL, pkMotionManager.NAME_WAIT, 0, 70)) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack_1.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "samyeon" }, { 2, "palbang" }, { 3, "jeongwi" }, { 4, "geomgyeong" }, { 5, "tanhwan" }, { 6, "gihyeol" }, { 16, "gigongcham" }, { 17, "gyeoksan" }, { 18, "daejin" }, { 19, "cheongeun" }, { 20, "geompung" }, { 21, "noegeom" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 0; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; if (i > 0) snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i + 1); else snprintf(szSkillAdd, sizeof(szSkillAdd), ""); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionSword = { { pkMotionManager.NAME_WAIT, "wait.msa", 50 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 50 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa" , 0}, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_ONEHAND_SWORD); for (const auto& it : m_vecMotionSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionTwoHandSword = { { pkMotionManager.NAME_WAIT, "wait.msa", 70 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_TWOHAND_SWORD); for (const auto& it : m_vecMotionSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "twohand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_TWOHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseSword = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_ONEHAND_SWORD); for (const auto& it : m_vecMotionHorseSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); std::vector<SMotion> m_vecMotionHorseTwoHandSword = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_TWOHAND_SWORD); for (const auto& it : m_vecMotionHorseTwoHandSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_twohand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right_hand"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameAssassin(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; if (!pRaceData->SetMotionRandomWeight(pkMotionManager.MODE_GENERAL, pkMotionManager.NAME_WAIT, 0, 70)) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack_1.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "amseup" }, { 2, "gungsin" }, { 3, "charyun" }, { 4, "eunhyeong" }, { 5, "sangong" }, { 6, "seomjeon" }, { 16, "yeonsa" }, { 17, "gwangyeok" }, { 18, "hwajo" }, { 19, "gyeonggong" }, { 20, "dokgigung" }, { 21, "seomgwang" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 0; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; if (i > 0) snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i + 1); else snprintf(szSkillAdd, sizeof(szSkillAdd), ""); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionSword = { { pkMotionManager.NAME_WAIT, "wait.msa", 70 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_WALK, "walk.msa" , 0 }, { pkMotionManager.NAME_RUN, "run.msa" , 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa" , 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_ONEHAND_SWORD); for (const auto& it : m_vecMotionSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionDagger = { { pkMotionManager.NAME_WAIT, "wait.msa", 70 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_8, "combo_08.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_DUALHAND_SWORD); for (const auto& it : m_vecMotionDagger) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "dualhand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_DUALHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_8); std::vector<SMotion> m_vecMotionBow = { { pkMotionManager.NAME_WAIT, "wait.msa", 70 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 30}, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50}, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50}, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50}, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50}, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_BOW); for (const auto& it : m_vecMotionBow) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "bow/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_BOW, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_BOW, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BOW, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseSword = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_ONEHAND_SWORD); for (const auto& it : m_vecMotionHorseSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); std::vector<SMotion> m_vecMotionHorseDagger = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_DUALHAND_SWORD); for (const auto& it : m_vecMotionHorseDagger) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_dualhand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); std::vector<SMotion> m_vecMotionHorseBow = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_BOW); for (const auto& it : m_vecMotionHorseBow) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_bow/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_BOW, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_BOW, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_BOW, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right"); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON_LEFT, "equip_left"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameSura(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack_1.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "swaeryeong" }, { 2, "yonggwon" }, { 3, "gwigeom" }, { 4, "gongpo" }, { 5, "jumagap" }, { 6, "pabeop" }, { 16, "maryeong" }, { 17, "hwayeom" }, { 18, "muyeong" }, { 19, "heuksin" }, { 20, "tusok" }, { 21, "mahwan" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 0; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; if (i > 0) snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i + 1); else snprintf(szSkillAdd, sizeof(szSkillAdd), ""); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionSword = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa" , 0 }, { pkMotionManager.NAME_RUN, "run.msa" , 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa" , 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_ONEHAND_SWORD); for (const auto& it : m_vecMotionSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseSword = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_ONEHAND_SWORD); for (const auto& it : m_vecMotionHorseSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameShaman(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack_1.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { pkMotionManager.NAME_SKILL + 1, "bipabu.msa" }, { pkMotionManager.NAME_SKILL + 2, "yongpa.msa" }, { pkMotionManager.NAME_SKILL + 3, "paeryong.msa" }, { pkMotionManager.NAME_SKILL + 4, "hosin_target.msa" }, { pkMotionManager.NAME_SKILL + 5, "boho_target.msa" }, { pkMotionManager.NAME_SKILL + 6, "gicheon_target.msa" }, { pkMotionManager.NAME_SKILL + 16, "noejeon.msa" }, { pkMotionManager.NAME_SKILL + 17, "byeorak.msa" }, { pkMotionManager.NAME_SKILL + 18, "pokroe.msa" }, { pkMotionManager.NAME_SKILL + 19, "jeongeop_target.msa" }, { pkMotionManager.NAME_SKILL + 20, "kwaesok_target.msa" }, { pkMotionManager.NAME_SKILL + 21, "jeungryeok_target.msa" }, { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "bipabu" }, { 2, "yongpa" }, { 3, "paeryong" }, { 4, "hosin" }, { 5, "boho" }, { 6, "gicheon" }, { 16, "noejeon" }, { 17, "byeorak" }, { 18, "pokroe" }, { 19, "jeongeop" }, { 20, "kwaesok" }, { 21, "jeungryeok" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 1; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i + 1); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionFan = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50,}, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50, }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50,}, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50, }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FAN); for (const auto& it : m_vecMotionFan) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fan/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FAN, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionBell = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50,}, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50, }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50,}, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50, }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_BELL); for (const auto& it : m_vecMotionBell) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "bell/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_BELL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseFan = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_FAN); for (const auto& it : m_vecMotionHorseFan) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_fan/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_FAN, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_FAN, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); std::vector<SMotion> m_vecMotionHorseBell = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_BELL); for (const auto& it : m_vecMotionHorseBell) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_bell/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_BELL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_BELL, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right"); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON_LEFT, "equip_left"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameWolfman(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadNewGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; if (!pRaceData->SetMotionRandomWeight(pkMotionManager.MODE_GENERAL, pkMotionManager.NAME_WAIT, 0, 50)) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_WAIT, "wait1.msa", 30 }, { pkMotionManager.NAME_WAIT, "wait2.msa", 20 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack1.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack2.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "split_slash" }, { 2, "wind_death" }, { 3, "reef_attack" }, { 4, "wreckage" }, { 5, "red_possession" }, { 6, "blue_possession" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 0; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; if (i > 0) snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i); else snprintf(szSkillAdd, sizeof(szSkillAdd), ""); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionClaw = { { pkMotionManager.NAME_WAIT, "wait.msa", 50 }, { pkMotionManager.NAME_WAIT, "wait.msa", 30 }, { pkMotionManager.NAME_WAIT, "wait.msa", 20 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "front_damage.msa", 50,}, { pkMotionManager.NAME_DAMAGE, "front_damage1.msa", 50, }, { pkMotionManager.NAME_DAMAGE_BACK, "back_damage.msa", 50,}, { pkMotionManager.NAME_DAMAGE_BACK, "back_damage1.msa", 50, }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_CLAW); for (const auto& it : m_vecMotionClaw) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "claw/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_CLAW, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "front_damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "front_damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseClaw = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_CLAW); for (const auto& it : m_vecMotionHorseClaw) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_claw/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_CLAW, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_CLAW, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_CLAW, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_CLAW, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_CLAW, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right_weapon"); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON_LEFT, "equip_left_weapon"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameSound() { std::vector<TSound> m_vecSound = { { CPythonItem::USESOUND_DEFAULT, "sound/ui/drop.wav" }, { CPythonItem::USESOUND_ACCESSORY, "sound/ui/equip_ring_amulet.wav" }, { CPythonItem::USESOUND_ARMOR, "sound/ui/equip_metal_armor.wav" }, { CPythonItem::USESOUND_BOW, "sound/ui/equip_bow.wav" }, { CPythonItem::USESOUND_WEAPON, "sound/ui/equip_metal_weapon.wav" }, { CPythonItem::USESOUND_POTION, "sound/ui/eat_potion.wav" }, { CPythonItem::USESOUND_PORTAL, "sound/ui/potal_scroll.wav" }, }; CPythonItem& rkItem = CPythonItem::Instance(); for (const auto &it : m_vecSound) rkItem.SetUseSoundFileName(it.dwType, it.stName); std::vector<TSound> m_vecDropSound = { { CPythonItem::DROPSOUND_DEFAULT, "sound/ui/drop.wav" }, { CPythonItem::DROPSOUND_ACCESSORY, "sound/ui/equip_ring_amulet.wav" }, { CPythonItem::DROPSOUND_ARMOR, "sound/ui/equip_metal_armor.wav" }, { CPythonItem::DROPSOUND_BOW, "sound/ui/equip_bow.wav" }, { CPythonItem::DROPSOUND_WEAPON, "sound/ui/equip_metal_weapon.wav" }, }; for (const auto &it : m_vecDropSound) rkItem.SetDropSoundFileName(it.dwType, it.stName); return true; } const bool CPlayerSettingsModule::LoadGameSkill() { return true; } PyObject* cpsmInitData(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadInitData(); return Py_BuildNone(); } PyObject* cpsmLoadGameSound(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameSound(); return Py_BuildNone(); } PyObject* cpsmLoadGameEffect(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameEffect(); return Py_BuildNone(); } PyObject* cpsmLoadGameWarrior(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameWarrior(CPlayerSettingsModule::RACE_WARRIOR_M, "d:/ymir work/pc/warrior/"); CPlayerSettingsModule::LoadGameWarrior(CPlayerSettingsModule::RACE_WARRIOR_W, "d:/ymir work/pc2/warrior/"); return Py_BuildNone(); } PyObject* cpsmLoadGameAssassin(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameAssassin(CPlayerSettingsModule::RACE_ASSASSIN_W, "d:/ymir work/pc/assassin/"); CPlayerSettingsModule::LoadGameAssassin(CPlayerSettingsModule::RACE_ASSASSIN_M, "d:/ymir work/pc2/assassin/"); return Py_BuildNone(); } PyObject* cpsmLoadGameSura(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameSura(CPlayerSettingsModule::RACE_SURA_M, "d:/ymir work/pc/sura/"); CPlayerSettingsModule::LoadGameSura(CPlayerSettingsModule::RACE_SURA_W, "d:/ymir work/pc2/sura/"); return Py_BuildNone(); } PyObject* cpsmLoadGameShaman(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameShaman(CPlayerSettingsModule::RACE_SHAMAN_W, "d:/ymir work/pc/shaman/"); CPlayerSettingsModule::LoadGameShaman(CPlayerSettingsModule::RACE_SHAMAN_M, "d:/ymir work/pc2/shaman/"); return Py_BuildNone(); } PyObject* cpsmLoadGameWolfman(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameWolfman(CPlayerSettingsModule::RACE_WOLFMAN_M, "d:/ymir work/pc3/wolfman/"); return Py_BuildNone(); } PyObject* cpsmLoadGameSkill(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameSkill(); return Py_BuildNone(); } void initplayersettingsmodule() { static PyMethodDef s_methods[] = { { "InitData", cpsmInitData, METH_VARARGS }, { "LoadGameSound", cpsmLoadGameSound, METH_VARARGS }, { "LoadGameEffect", cpsmLoadGameEffect, METH_VARARGS }, { "LoadGameWarrior", cpsmLoadGameWarrior, METH_VARARGS }, { "LoadGameAssassin", cpsmLoadGameAssassin, METH_VARARGS }, { "LoadGameSura", cpsmLoadGameSura, METH_VARARGS }, { "LoadGameShaman", cpsmLoadGameShaman, METH_VARARGS }, { "LoadGameWolfman", cpsmLoadGameWolfman, METH_VARARGS }, { "LoadGameSkill", cpsmLoadGameSkill, METH_VARARGS }, { NULL, NULL, NULL }, }; PyObject* poModule = Py_InitModule("cpsm", s_methods); } #endif
Header File
Kod:#pragma once class CPlayerSettingsModule { public: enum EConfig { DUST_GAP = 250, HORSE_DUST_GAP = 500, RACE_WARRIOR_M = 0, RACE_ASSASSIN_W = 1, RACE_SURA_M = 2, RACE_SHAMAN_W = 3, RACE_WARRIOR_W = 4, RACE_ASSASSIN_M = 5, RACE_SURA_W = 6, RACE_SHAMAN_M = 7, RACE_WOLFMAN_M = 8, COMBO_TYPE_1 = 0, COMBO_TYPE_2 = 1, COMBO_TYPE_3 = 2, COMBO_INDEX_1 = 0, COMBO_INDEX_2 = 1, COMBO_INDEX_3 = 2, COMBO_INDEX_4 = 3, COMBO_INDEX_5 = 4, COMBO_INDEX_6 = 5, FILE_MAX_NUM = 70, BONE_MAX_NUM = 24, }; private: typedef struct SEffect { UINT uiType; char stBone[BONE_MAX_NUM]; char stEffect[FILE_MAX_NUM]; } TEffect; typedef struct SRaceData { DWORD dwRace; char stMSM[FILE_MAX_NUM]; char stIntroMotion[FILE_MAX_NUM]; } TRaceData; typedef struct SMotion { int wMotionIndex; char stName[FILE_MAX_NUM]; BYTE byPercentage; } TMotion; typedef struct SFly { DWORD dwIndex; BYTE byType; char stName[FILE_MAX_NUM]; } TFly; typedef struct SSound { DWORD dwType; char stName[FILE_MAX_NUM]; } TSound; public: const static bool LoadInitData(); const static bool LoadGameEffect(); const static bool RegisterEmotionAnis(char stFolder[FILE_MAX_NUM]); const static bool LoadGeneralMotion(char stFolder[FILE_MAX_NUM]); const static bool LoadNewGeneralMotion(char stFolder[FILE_MAX_NUM]); const static bool LoadGameWarrior(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameAssassin(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameSura(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameShaman(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameWolfman(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameSound(); const static bool LoadGameSkill(); };
1 Saatimi aldi, Owsapin 4.9.7 uyumlu.
Virustotal eklendi, paylaşım için teşekkürler. Sevgiler, saygılar...
Sağolasın biscuitBuda bende olsun.
- Owsap 4.9.7 uyumlu
- Definelerinizi karstilastirin.
- Wolfman sorunsuz eklendi
- #ifdef ENABLE_QUIVER_SYSTEM: (Line 293) düzeltildi.
- #ifdef ENABLE_SPHAERA_SYSTEM: silindi.
Owsapin Filesini kullalanlar icin: constInfo2.py ac bu defini EXTENDED_LOADING_GUAGE False olarak ver. Yoksa yavas calisir.
Source File:
Kod:#include "StdAfx.h" #ifdef ENABLE_CPP_PSM #include "PythonPlayerSettingsModule.h" #include "InstanceBase.h" #include "../EffectLib/EffectManager.h" #include "PythonSkill.h" #include "../gamelib/RaceManager.h" #include "PythonItem.h" CRaceMotionData& pkMotionManager = CRaceMotionData(); static const DWORD GUILD_SKILL_DRAGONBLOOD = pkMotionManager.NAME_SKILL + 101; static const DWORD GUILD_SKILL_DRAGONBLESS = pkMotionManager.NAME_SKILL + 102; static const DWORD GUILD_SKILL_BLESSARMOR = pkMotionManager.NAME_SKILL + 103; static const DWORD GUILD_SKILL_SPPEDUP = pkMotionManager.NAME_SKILL + 104; static const DWORD GUILD_SKILL_DRAGONWRATH = pkMotionManager.NAME_SKILL + 105; static const DWORD GUILD_SKILL_MAGICUP = pkMotionManager.NAME_SKILL + 106; static const DWORD HORSE_SKILL_WILDATTACK = pkMotionManager.NAME_SKILL + 121; static const DWORD HORSE_SKILL_CHARGE = pkMotionManager.NAME_SKILL + 122; static const DWORD HORSE_SKILL_SPLASH = pkMotionManager.NAME_SKILL + 123; const bool CPlayerSettingsModule::LoadInitData() { CInstanceBase & pkBase = CInstanceBase(); static const std::vector<TEffect> m_vecEffectData = { { pkBase.EFFECT_DUST, "", "d:/ymir work/effect/etc/dust/dust.mse" } , { pkBase.EFFECT_HORSE_DUST, "", "d:/ymir work/effect/etc/dust/running_dust.mse" }, { pkBase.EFFECT_HIT, "", "d:/ymir work/effect/hit/blow_1/blow_1_low.mse" }, { pkBase.EFFECT_HPUP_RED, "", "d:/ymir work/effect/etc/recuperation/drugup_red.mse" }, { pkBase.EFFECT_SPUP_BLUE, "", "d:/ymir work/effect/etc/recuperation/drugup_blue.mse" }, { pkBase.EFFECT_SPEEDUP_GREEN, "", "d:/ymir work/effect/etc/recuperation/drugup_green.mse" }, { pkBase.EFFECT_DXUP_PURPLE, "", "d:/ymir work/effect/etc/recuperation/drugup_purple.mse" }, { pkBase.EFFECT_AUTO_HPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_red.mse" }, { pkBase.EFFECT_AUTO_SPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_blue.mse" }, { pkBase.EFFECT_RAMADAN_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item1.mse" }, { pkBase.EFFECT_HALLOWEEN_CANDY_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item2.mse" }, { pkBase.EFFECT_HAPPINESS_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item3.mse" }, { pkBase.EFFECT_LOVE_PENDANT_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item4.mse" }, #ifdef ENABLE_ACCE_COSTUME_SYSTEM { pkBase.EFFECT_ACCE_SUCESS_ABSORB, "", "d:/ymir work/effect/etc/buff/buff_item6.mse" }, { pkBase.EFFECT_ACCE_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item7.mse" }, #endif { pkBase.EFFECT_EASTER_CANDY_EQIP, "", "d:/ymir work/effect/etc/buff/buff_item8.mse" }, { pkBase.EFFECT_PENETRATE, "Bip01", "d:/ymir work/effect/hit/gwantong.mse" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_BLOCK, {"", "d:/ymir work/effect/etc/" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DODGE, {"", "d:/ymir work/effect/etc/" }, { pkBase.EFFECT_FIRECRACKER, "", "d:/ymir work/effect/etc/firecracker/newyear_firecracker.mse" }, { pkBase.EFFECT_SPIN_TOP, "", "d:/ymir work/effect/etc/firecracker/paing_i.mse" }, { pkBase.EFFECT_SELECT, "", "d:/ymir work/effect/etc/click/click_select.mse" }, { pkBase.EFFECT_TARGET, "", "d:/ymir work/effect/etc/click/click_glow_select.mse" }, { pkBase.EFFECT_STUN, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun.mse" }, { pkBase.EFFECT_CRITICAL, "Bip01 R Hand", "d:/ymir work/effect/hit/critical.mse" }, //{ pkBase.EFFECT_PICK, "", "d:/ymir work/effect/etc/click/click.mse" }, Noteme { pkBase.EFFECT_DAMAGE_TARGET, "", "d:/ymir work/effect/affect/damagevalue/target.mse" }, { pkBase.EFFECT_DAMAGE_NOT_TARGET, "", "d:/ymir work/effect/affect/damagevalue/nontarget.mse" }, { pkBase.EFFECT_DAMAGE_SELFDAMAGE, "", "d:/ymir work/effect/affect/damagevalue/damage.mse" }, { pkBase.EFFECT_DAMAGE_SELFDAMAGE2, "", "d:/ymir work/effect/affect/damagevalue/damage_1.mse" }, { pkBase.EFFECT_DAMAGE_POISON, "", "d:/ymir work/effect/affect/damagevalue/poison.mse" }, { pkBase.EFFECT_DAMAGE_MISS, "", "d:/ymir work/effect/affect/damagevalue/miss.mse" }, { pkBase.EFFECT_DAMAGE_TARGETMISS, "", "d:/ymir work/effect/affect/damagevalue/target_miss.mse" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_CRITICAL, "", "d:/ymir work/effect/affect/damagevalue/critical.mse" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SUCCESS, "", "season1/effect/success.mse" }, //chrmgr.RegisterCacheEffect(chrmgr.EFFECT_FAIL, "", "season1/effect/fail.mse" }, { pkBase.EFFECT_LEVELUP_ON_14_FOR_GERMANY, "","season1/effect/paymessage_warning.mse" }, { pkBase.EFFECT_LEVELUP_UNDER_15_FOR_GERMANY, "", "season1/effect/paymessage_decide.mse" }, { pkBase.EFFECT_PERCENT_DAMAGE1, "", "d:/ymir work/effect/hit/percent_damage1.mse" }, { pkBase.EFFECT_PERCENT_DAMAGE2, "", "d:/ymir work/effect/hit/percent_damage2.mse" }, { pkBase.EFFECT_PERCENT_DAMAGE3, "", "d:/ymir work/effect/hit/percent_damage3.mse" }, { pkBase.EFFECT_THUNDER_AREA, "", "D:/ymir work/effect/monster/light_emissive3.mse" }, { pkBase.EFFECT_THUNDER, "", "D:/ymir work/effect/monster/yellow_tigerman_24_1.mse" }, { pkBase.EFFECT_HEAL, "", "D:/ymir work/pc/shaman/effect/jeongeop_2.mse" }, { pkBase.EFFECT_CAPE_OF_COURAGE, "", "D:/ymir work/effect/etc/buff/buff_item9.mse" }, { pkBase.EFFECT_CHOCOLATE_PENDANT, "", "D:/ymir work/effect/etc/buff/buff_item10.mse" }, { pkBase.EFFECT_PEPSI_EVENT, "", "D:/ymir work/effect/etc/buff/buff_item11.mse" }, { pkBase.EFFECT_DRAGONLAIR_STONE_UNBEATABLE_1, "", "d:/ymir work/effect/monster2/redd_moojuk.mse" }, { pkBase.EFFECT_DRAGONLAIR_STONE_UNBEATABLE_2, "", "d:/ymir work/effect/monster2/redd_moojuk.mse" }, { pkBase.EFFECT_DRAGONLAIR_STONE_UNBEATABLE_3, "", "d:/ymir work/effect/monster2/redd_moojuk_blue.mse" }, { pkBase.EFFECT_DRAGONLAIR_STONE_UNBEATABLE_4, "", "d:/ymir work/effect/monster2/redd_moojuk_green.mse" }, { pkBase.EFFECT_BATTLE_POTION, "", "D:/ymir work/effect/etc/buff/buff_item12.mse" }, { pkBase.EFFECT_NAZAR_PENDANT, "", "D:/ymir work/effect/etc/buff/buff_item13.mse" }, { pkBase.EFFECT_GUARDIAN_PENDANT, "", "D:/ymir work/effect/etc/buff/buff_item14.mse" }, { pkBase.EFFECT_FLOWER_EVENT, "", "d:/ymir work/effect/etc/buff/buff_item15_flower.mse" }, { pkBase.EFFECT_GEM_PENDANT, "", "d:/ymir work/effect/etc/buff/buff_item16.mse" }, }; static std::vector<TRaceData> m_vecRaceData = { { RACE_WARRIOR_M, "warrior_m.msm", "d:/ymir work/pc/warrior/intro/" }, { RACE_WARRIOR_W, "warrior_w.msm", "d:/ymir work/pc2/warrior/intro/" }, { RACE_ASSASSIN_W, "assassin_w.msm", "d:/ymir work/pc/assassin/intro/" }, { RACE_ASSASSIN_M, "assassin_m.msm", "d:/ymir work/pc2/assassin/intro/" }, { RACE_SURA_M, "sura_m.msm", "d:/ymir work/pc/sura/intro/" }, { RACE_SURA_W, "sura_w.msm", "d:/ymir work/pc2/sura/intro/" }, { RACE_SHAMAN_W, "shaman_w.msm", "d:/ymir work/pc/shaman/intro/" }, { RACE_SHAMAN_M, "shaman_m.msm", "d:/ymir work/pc2/shaman/intro/" }, { RACE_WOLFMAN_M, "wolfman_m.msm", "d:/ymir work/pc3/wolfman/intro/" }, }; std::vector<SMotion> m_vecMotion = { { pkMotionManager.NAME_INTRO_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_INTRO_SELECTED, "selected.msa", 0 }, { pkMotionManager.NAME_INTRO_NOT_SELECTED, "not_selected.msa", 0 }, }; pkBase.SetDustGap(DUST_GAP); pkBase.SetHorseDustGap(HORSE_DUST_GAP); for (const auto& it : m_vecEffectData) { pkBase.RegisterEffect(it.uiType, it.stBone, it.stEffect, true); } CRaceManager& pkManager = CRaceManager::Instance(); char szFileName[FILE_MAX_NUM]; for (auto& it : m_vecRaceData) { pkManager.CreateRace(it.dwRace); pkManager.SelectRace(it.dwRace); CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; if (!pRaceData->LoadRaceData(it.stMSM)) { return false; } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it2 : m_vecMotion) { snprintf(szFileName, sizeof(szFileName), "%s%s", it.stIntroMotion, it2.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it2.wMotionIndex, szFileName, it2.byPercentage); } } return true; } const bool CPlayerSettingsModule::LoadGameEffect() { CInstanceBase& pkBase = CInstanceBase(); CFlyingManager& pkFly = CFlyingManager::Instance(); char GM_MARK[FILE_MAX_NUM]; snprintf(GM_MARK, sizeof(GM_MARK), "%s/effect/gm.mse", LocaleService_GetLocalePath()); std::vector<TEffect> m_vecEffectData = { { pkBase.EFFECT_SPAWN_APPEAR, "Bip01", "d:/ymir work/effect/etc/appear_die/monster_appear.mse" }, { pkBase.EFFECT_SPAWN_DISAPPEAR, "Bip01", "d:/ymir work/effect/etc/appear_die/monster_die.mse" }, { pkBase.EFFECT_FLAME_ATTACK, "equip_right_hand", "d:/ymir work/effect/hit/blow_flame/flame_3_weapon.mse" }, { pkBase.EFFECT_FLAME_HIT, "", "d:/ymir work/effect/hit/blow_flame/flame_3_blow.mse" }, { pkBase.EFFECT_FLAME_ATTACH, "", "d:/ymir work/effect/hit/blow_flame/flame_3_body.mse" }, { pkBase.EFFECT_ELECTRIC_ATTACK, "equip_right", "d:/ymir work/effect/hit/blow_electric/light_1_weapon.mse" }, { pkBase.EFFECT_ELECTRIC_HIT, "", "d:/ymir work/effect/hit/blow_electric/light_1_blow.mse" }, { pkBase.EFFECT_ELECTRIC_ATTACH, "", "d:/ymir work/effect/hit/blow_electric/light_1_body.mse" }, //{ pkBase.EFFECT_GYEONGGONG_BOOM, "Bip01", "d:/ymir work/effect/hit/gyeonggong_boom.mse" }, { pkBase.EFFECT_LEVELUP, "", "d:/ymir work/effect/etc/levelup_1/level_up.mse" }, { pkBase.EFFECT_SKILLUP, "", "d:/ymir work/effect/etc/skillup/skillup_1.mse" }, { pkBase.EFFECT_EMPIRE + 1, "Bip01", "d:/ymir work/effect/etc/empire/empire_A.mse" }, { pkBase.EFFECT_EMPIRE + 2, "Bip01", "d:/ymir work/effect/etc/empire/empire_B.mse" }, { pkBase.EFFECT_EMPIRE + 3, "Bip01", "d:/ymir work/effect/etc/empire/empire_C.mse" }, { pkBase.EFFECT_WEAPON + 1, "equip_right_hand", "d:/ymir work/pc/warrior/effect/geom_sword_loop.mse" }, { pkBase.EFFECT_WEAPON + 2, "equip_right_hand", "d:/ymir work/pc/warrior/effect/geom_spear_loop.mse" }, { pkBase.EFFECT_AFFECT + 3, "Bip01", "d:/ymir work/effect/hit/blow_poison/poison_loop.mse" }, { pkBase.EFFECT_AFFECT + 42, "Bip01", "d:/ymir work/effect/hit/blow_poison/bleeding_loop.mse" }, { pkBase.EFFECT_AFFECT + 4, "", "d:/ymir work/effect/affect/slow.mse" }, { pkBase.EFFECT_AFFECT + 5, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun_loop.mse" }, { pkBase.EFFECT_AFFECT + 6, "", "d:/ymir work/effect/etc/ready/ready.mse" }, //{ pkBase.EFFECT_AFFECT+8, "", "d:/ymir work/guild/effect/10_construction.mse" }, //{ pkBase.EFFECT_AFFECT+9, "", "d:/ymir work/guild/effect/20_construction.mse" }, //{ pkBase.EFFECT_AFFECT+10, "", "d:/ymir work/guild/effect/20_upgrade.mse" }, { pkBase.EFFECT_AFFECT + 16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse" }, { pkBase.EFFECT_AFFECT + 17, "", "d:/ymir work/pc/assassin/effect/gyeonggong_loop.mse" }, { pkBase.EFFECT_AFFECT + 19, "Bip01 R Finger2", "d:/ymir work/pc/sura/effect/gwigeom_loop.mse" }, { pkBase.EFFECT_AFFECT + 20, "", "d:/ymir work/pc/sura/effect/fear_loop.mse" }, { pkBase.EFFECT_AFFECT + 21, "", "d:/ymir work/pc/sura/effect/jumagap_loop.mse" }, { pkBase.EFFECT_AFFECT + 22, "", "d:/ymir work/pc/shaman/effect/3hosin_loop.mse" }, { pkBase.EFFECT_AFFECT + 23, "", "d:/ymir work/pc/shaman/effect/boho_loop.mse" }, { pkBase.EFFECT_AFFECT + 24, "", "d:/ymir work/pc/shaman/effect/10kwaesok_loop.mse" }, { pkBase.EFFECT_AFFECT + 25, "", "d:/ymir work/pc/sura/effect/heuksin_loop.mse" }, { pkBase.EFFECT_AFFECT + 26, "", "d:/ymir work/pc/sura/effect/muyeong_loop.mse" }, // { pkBase.EFFECT_AFFECT + 28, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop.mse" }, { pkBase.EFFECT_AFFECT + 29, "Bip01 R Hand", "d:/ymir work/pc/shaman/effect/6gicheon_hand.mse" }, { pkBase.EFFECT_AFFECT + 30, "Bip01 L Hand", "d:/ymir work/pc/shaman/effect/jeungryeok_hand.mse" }, { pkBase.EFFECT_AFFECT + 32, "Bip01 Head", "d:/ymir work/pc/sura/effect/pabeop_loop.mse" }, { pkBase.EFFECT_AFFECT + 33, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse" }, { pkBase.EFFECT_AFFECT + 35, "", "d:/ymir work/effect/etc/guild_war_flag/flag_red.mse" }, { pkBase.EFFECT_AFFECT + 36, "", "d:/ymir work/effect/etc/guild_war_flag/flag_blue.mse" }, { pkBase.EFFECT_AFFECT + 37, "", "d:/ymir work/effect/etc/guild_war_flag/flag_yellow.mse" }, { pkBase.EFFECT_AFFECT + 43, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop_w.mse" }, { pkBase.EFFECT_AFFECT + 44, "", "d:/ymir work/pc3/common/effect/gyeokgongjang_loop_w.mse" }, { pkBase.EFFECT_REFINED + 1, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7.mse" }, { pkBase.EFFECT_REFINED + 2, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8.mse" }, { pkBase.EFFECT_REFINED + 3, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9.mse" }, { pkBase.EFFECT_REFINED + 4, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7_b.mse" }, { pkBase.EFFECT_REFINED + 5, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_8_b.mse" }, { pkBase.EFFECT_REFINED + 6, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_9_b.mse" }, { pkBase.EFFECT_REFINED + 7, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7_f.mse" }, { pkBase.EFFECT_REFINED + 8, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8_f.mse" }, { pkBase.EFFECT_REFINED + 9, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9_f.mse" }, { pkBase.EFFECT_REFINED + 10, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7_s.mse" }, { pkBase.EFFECT_REFINED + 11, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8_s.mse" }, { pkBase.EFFECT_REFINED + 12, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9_s.mse" }, { pkBase.EFFECT_REFINED + 13, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7_s.mse" }, { pkBase.EFFECT_REFINED + 14, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_8_s.mse" }, { pkBase.EFFECT_REFINED + 15, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_9_s.mse" }, { pkBase.EFFECT_REFINED + 16, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7_w.mse" }, { pkBase.EFFECT_REFINED + 17, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8_w.mse" }, { pkBase.EFFECT_REFINED + 18, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9_w.mse" }, { pkBase.EFFECT_REFINED + 19, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7_w.mse" }, { pkBase.EFFECT_REFINED + 20, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_8_w.mse" }, { pkBase.EFFECT_REFINED + 21, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_9_w.mse" }, { pkBase.EFFECT_REFINED + 22, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_7.mse" }, { pkBase.EFFECT_REFINED + 23, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_8.mse" }, { pkBase.EFFECT_REFINED + 24, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_9.mse" }, { pkBase.EFFECT_REFINED + 25, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-1.mse" }, { pkBase.EFFECT_REFINED + 26, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse" }, { pkBase.EFFECT_REFINED + 27, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-5-1.mse" }, { pkBase.EFFECT_REFINED + 28, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-5_jin.mse" }, #ifdef ENABLE_ACCE_COSTUME_SYSTEM { pkBase.EFFECT_REFINED + 29, "Bip01", "d:/ymir work/pc/common/effect/armor/acc_01.mse" }, #endif { pkBase.EFFECT_REFINED + 30, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_7th_01.mse" }, { pkBase.EFFECT_REFINED + 31, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7th.mse" }, { pkBase.EFFECT_REFINED + 32, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7th_b.mse" }, { pkBase.EFFECT_REFINED + 33, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7th_f.mse" }, { pkBase.EFFECT_REFINED + 34, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7th_s.mse" }, { pkBase.EFFECT_REFINED + 35, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7th_s.mse" }, { pkBase.EFFECT_REFINED + 36, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7th_w.mse" }, { pkBase.EFFECT_REFINED + 37, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7th_w.mse" }, { pkBase.EFFECT_EMOTICON + 0, "", "d:/ymir work/effect/etc/emoticon/sweat.mse" }, { pkBase.EFFECT_EMOTICON + 1, "", "d:/ymir work/effect/etc/emoticon/money.mse" }, { pkBase.EFFECT_EMOTICON + 2, "", "d:/ymir work/effect/etc/emoticon/happy.mse" }, { pkBase.EFFECT_EMOTICON + 3, "", "d:/ymir work/effect/etc/emoticon/love_s.mse" }, { pkBase.EFFECT_EMOTICON + 4, "", "d:/ymir work/effect/etc/emoticon/love_l.mse" }, { pkBase.EFFECT_EMOTICON + 5, "", "d:/ymir work/effect/etc/emoticon/angry.mse" }, { pkBase.EFFECT_EMOTICON + 6, "", "d:/ymir work/effect/etc/emoticon/aha.mse" }, { pkBase.EFFECT_EMOTICON + 7, "", "d:/ymir work/effect/etc/emoticon/gloom.mse" }, { pkBase.EFFECT_EMOTICON + 8, "", "d:/ymir work/effect/etc/emoticon/sorry.mse" }, { pkBase.EFFECT_EMOTICON + 9, "", "d:/ymir work/effect/etc/emoticon/!_mix_back.mse" }, { pkBase.EFFECT_EMOTICON + 10, "", "d:/ymir work/effect/etc/emoticon/question.mse" }, { pkBase.EFFECT_EMOTICON + 11, "", "d:/ymir work/effect/etc/emoticon/fish.mse" }, { pkBase.EFFECT_EMOTICON + 12, "", "d:/ymir work/effect/etc/emoticon/charging.mse" }, { pkBase.EFFECT_EMOTICON + 13, "", "d:/ymir work/effect/etc/emoticon/nosay.mse" }, { pkBase.EFFECT_EMOTICON + 14, "", "d:/ymir work/effect/etc/emoticon/weather1.mse" }, { pkBase.EFFECT_EMOTICON + 15, "", "d:/ymir work/effect/etc/emoticon/weather2.mse" }, { pkBase.EFFECT_EMOTICON + 16, "", "d:/ymir work/effect/etc/emoticon/weather3.mse" }, { pkBase.EFFECT_EMOTICON + 17, "", "d:/ymir work/effect/etc/emoticon/hungry.mse" }, { pkBase.EFFECT_EMOTICON + 18, "", "d:/ymir work/effect/etc/emoticon/siren.mse" }, { pkBase.EFFECT_EMOTICON + 19, "", "d:/ymir work/effect/etc/emoticon/letter.mse" }, { pkBase.EFFECT_EMOTICON + 20, "", "d:/ymir work/effect/etc/emoticon/call.mse" }, { pkBase.EFFECT_EMOTICON + 21, "", "d:/ymir work/effect/etc/emoticon/celebration.mse" }, { pkBase.EFFECT_EMOTICON + 22, "", "d:/ymir work/effect/etc/emoticon/alcohol.mse" }, { pkBase.EFFECT_EMOTICON + 23, "", "d:/ymir work/effect/etc/emoticon/busy.mse" }, { pkBase.EFFECT_EMOTICON + 24, "", "d:/ymir work/effect/etc/emoticon/whirl.mse" }, { pkBase.EFFECT_AFFECT + 49, "", "d:/ymir work/effect/etc/soul/soul_red_001.mse" }, { pkBase.EFFECT_AFFECT + 50, "", "d:/ymir work/effect/etc/soul/soul_blue_001.mse" }, { pkBase.EFFECT_AFFECT + 51, "", "d:/ymir work/effect/etc/soul/soul_mix_001.mse" }, }; enum { FLY_NONE, FLY_EXP, FLY_HP_MEDIUM, FLY_HP_BIG, FLY_SP_SMALL, FLY_SP_MEDIUM, FLY_SP_BIG, FLY_FIREWORK1, FLY_FIREWORK2, FLY_FIREWORK3, FLY_FIREWORK4, FLY_FIREWORK5, FLY_FIREWORK6, FLY_FIREWORK_XMAS, FLY_CHAIN_LIGHTNING, FLY_HP_SMALL, FLY_SKILL_MUYEONG, #ifdef ENABLE_QUIVER_SYSTEM FLY_QUIVER_ATTACK_NORMAL, #endif }; std::vector<SFly> m_vecFlyData = { { FLY_EXP, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_yellow_small2.msf" }, { FLY_HP_MEDIUM, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_small.msf" }, { FLY_HP_BIG, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_big.msf" }, { FLY_SP_SMALL, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_warrior_small.msf" }, { FLY_SP_MEDIUM, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_small.msf" }, { FLY_SP_BIG, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_big.msf" }, { FLY_FIREWORK1, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_1.msf" }, { FLY_FIREWORK2, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_2.msf" }, { FLY_FIREWORK3, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_3.msf" }, { FLY_FIREWORK4, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_4.msf" }, { FLY_FIREWORK5, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_5.msf" }, { FLY_FIREWORK6, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_6.msf" }, { FLY_FIREWORK_XMAS, pkFly.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_xmas.msf" }, { FLY_CHAIN_LIGHTNING, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/shaman/effect/pokroe.msf" }, { FLY_HP_SMALL, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_smallest.msf" }, { FLY_SKILL_MUYEONG, pkFly.INDEX_FLY_TYPE_AUTO_FIRE, "d:/ymir work/pc/sura/effect/muyeong_fly.msf" }, #ifdef ENABLE_QUIVER_SYSTEM { FLY_QUIVER_ATTACK_NORMAL, pkFly.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/assassin/effect/arrow_02.msf" }, #endif }; // GM_EFFECT TEffect effect; effect.uiType = pkBase.EFFECT_AFFECT + 0; memcpy(effect.stBone, "Bip01", sizeof(effect.stBone)); memcpy(effect.stEffect, GM_MARK, sizeof(effect.stEffect)); m_vecEffectData.push_back(effect); // GM_EFFECT for (const auto& it : m_vecEffectData) { pkBase.RegisterEffect(it.uiType, it.stBone, it.stEffect, false); } for (const auto& it : m_vecFlyData) { pkFly.RegisterIndexedFlyData(it.dwIndex, it.byType, it.stName); } return true; } const bool CPlayerSettingsModule::RegisterEmotionAnis(char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecEmotion = { { pkMotionManager.NAME_CLAP, "clap.msa", 0 }, { pkMotionManager.NAME_CHEERS_1, "cheers_1.msa", 0 }, { pkMotionManager.NAME_CHEERS_2, "cheers_2.msa", 0 }, { pkMotionManager.NAME_DANCE_1, "dance_1.msa", 0 }, { pkMotionManager.NAME_DANCE_2, "dance_2.msa", 0 }, { pkMotionManager.NAME_DANCE_3, "dance_3.msa", 0 }, { pkMotionManager.NAME_DANCE_4, "dance_4.msa", 0 }, { pkMotionManager.NAME_DANCE_5, "dance_5.msa", 0 }, { pkMotionManager.NAME_DANCE_6, "dance_6.msa", 0 }, { pkMotionManager.NAME_CONGRATULATION, "congratulation.msa", 0 }, { pkMotionManager.NAME_FORGIVE, "forgive.msa", 0 }, { pkMotionManager.NAME_ANGRY, "angry.msa", 0 }, { pkMotionManager.NAME_ATTRACTIVE, "attractive.msa", 0 }, { pkMotionManager.NAME_SAD, "sad.msa", 0 }, { pkMotionManager.NAME_SHY, "shy.msa", 0 }, { pkMotionManager.NAME_CHEERUP, "cheerup.msa", 0 }, { pkMotionManager.NAME_BANTER, "banter.msa", 0 }, { pkMotionManager.NAME_JOY, "joy.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_WARRIOR, "french_kiss_with_warrior.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_ASSASSIN, "french_kiss_with_assassin.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_SURA, "french_kiss_with_sura.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_SHAMAN, "french_kiss_with_shaman.msa", 0 }, { pkMotionManager.NAME_FRENCH_KISS_WITH_WOLFMAN, "french_kiss_with_wolfman.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_WARRIOR, "kiss_with_warrior.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_ASSASSIN, "kiss_with_assassin.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_SURA, "kiss_with_sura.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_SHAMAN, "kiss_with_shaman.msa", 0 }, { pkMotionManager.NAME_KISS_WITH_WOLFMAN, "kiss_with_wolfman.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_WARRIOR, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_ASSASSIN, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_SURA, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_SHAMAN, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HIT_WITH_WOLFMAN, "slap_hit.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_WARRIOR, "slap_hurt.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_ASSASSIN, "slap_hurt.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_SURA, "slap_hurt.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_SHAMAN, "slap_hurt.msa", 0 }, { pkMotionManager.NAME_SLAP_HURT_WITH_WOLFMAN, "slap_hurt.msa", 0 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecEmotion) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "action/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->RegisterMotionMode(pkMotionManager.MODE_WEDDING_DRESS); for (const auto& it : m_vecEmotion) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "action/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_WEDDING_DRESS, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecEmotionDress = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "walk.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_WEDDING_DRESS); for (const auto& it : m_vecEmotionDress) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "wedding/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_WEDDING_DRESS, it.wMotionIndex, szFileName, it.byPercentage); } return true; } const bool CPlayerSettingsModule::LoadGeneralMotion(char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecBasicMotion = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_DAMAGE_FLYING, "damage_flying.msa", 0 }, { pkMotionManager.NAME_STAND_UP, "falling_stand.msa", 0 }, { pkMotionManager.NAME_DAMAGE_FLYING_BACK, "back_damage_flying.msa", 0 }, { pkMotionManager.NAME_STAND_UP_BACK, "back_falling_stand.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { pkMotionManager.NAME_DIG, "dig.msa", 0 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecBasicMotion) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } return true; } const bool CPlayerSettingsModule::LoadNewGeneralMotion(char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecBasicMotion = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "front_damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "front_damage1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "back_damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "back_damage1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_FLYING, "front_damage_flying.msa", 0 }, { pkMotionManager.NAME_STAND_UP, "front_falling_standup.msa", 0 }, { pkMotionManager.NAME_DAMAGE_FLYING_BACK, "back_damage_flying.msa", 0 }, { pkMotionManager.NAME_STAND_UP_BACK, "back_falling_standup.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { pkMotionManager.NAME_DIG, "dig.msa", 0 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecBasicMotion) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } return true; } const bool CPlayerSettingsModule::LoadGameWarrior(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; if (!pRaceData->SetMotionRandomWeight(pkMotionManager.MODE_GENERAL, pkMotionManager.NAME_WAIT, 0, 70)) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack_1.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "samyeon" }, { 2, "palbang" }, { 3, "jeongwi" }, { 4, "geomgyeong" }, { 5, "tanhwan" }, { 6, "gihyeol" }, { 16, "gigongcham" }, { 17, "gyeoksan" }, { 18, "daejin" }, { 19, "cheongeun" }, { 20, "geompung" }, { 21, "noegeom" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 0; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; if (i > 0) snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i + 1); else snprintf(szSkillAdd, sizeof(szSkillAdd), ""); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionSword = { { pkMotionManager.NAME_WAIT, "wait.msa", 50 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 50 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa" , 0}, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_ONEHAND_SWORD); for (const auto& it : m_vecMotionSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionTwoHandSword = { { pkMotionManager.NAME_WAIT, "wait.msa", 70 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_TWOHAND_SWORD); for (const auto& it : m_vecMotionSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "twohand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_TWOHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseSword = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_ONEHAND_SWORD); for (const auto& it : m_vecMotionHorseSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); std::vector<SMotion> m_vecMotionHorseTwoHandSword = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_TWOHAND_SWORD); for (const auto& it : m_vecMotionHorseTwoHandSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_twohand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right_hand"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameAssassin(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; if (!pRaceData->SetMotionRandomWeight(pkMotionManager.MODE_GENERAL, pkMotionManager.NAME_WAIT, 0, 70)) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack_1.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "amseup" }, { 2, "gungsin" }, { 3, "charyun" }, { 4, "eunhyeong" }, { 5, "sangong" }, { 6, "seomjeon" }, { 16, "yeonsa" }, { 17, "gwangyeok" }, { 18, "hwajo" }, { 19, "gyeonggong" }, { 20, "dokgigung" }, { 21, "seomgwang" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 0; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; if (i > 0) snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i + 1); else snprintf(szSkillAdd, sizeof(szSkillAdd), ""); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionSword = { { pkMotionManager.NAME_WAIT, "wait.msa", 70 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_WALK, "walk.msa" , 0 }, { pkMotionManager.NAME_RUN, "run.msa" , 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa" , 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_ONEHAND_SWORD); for (const auto& it : m_vecMotionSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionDagger = { { pkMotionManager.NAME_WAIT, "wait.msa", 70 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 30 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_8, "combo_08.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_DUALHAND_SWORD); for (const auto& it : m_vecMotionDagger) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "dualhand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_DUALHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_8); std::vector<SMotion> m_vecMotionBow = { { pkMotionManager.NAME_WAIT, "wait.msa", 70 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 30}, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50}, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50}, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50}, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50}, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_BOW); for (const auto& it : m_vecMotionBow) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "bow/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_BOW, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_BOW, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BOW, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseSword = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_ONEHAND_SWORD); for (const auto& it : m_vecMotionHorseSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); std::vector<SMotion> m_vecMotionHorseDagger = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_DUALHAND_SWORD); for (const auto& it : m_vecMotionHorseDagger) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_dualhand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); std::vector<SMotion> m_vecMotionHorseBow = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, { HORSE_SKILL_SPLASH, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_BOW); for (const auto& it : m_vecMotionHorseBow) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_bow/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_BOW, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_BOW, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_BOW, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right"); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON_LEFT, "equip_left"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameSura(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack_1.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "swaeryeong" }, { 2, "yonggwon" }, { 3, "gwigeom" }, { 4, "gongpo" }, { 5, "jumagap" }, { 6, "pabeop" }, { 16, "maryeong" }, { 17, "hwayeom" }, { 18, "muyeong" }, { 19, "heuksin" }, { 20, "tusok" }, { 21, "mahwan" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 0; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; if (i > 0) snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i + 1); else snprintf(szSkillAdd, sizeof(szSkillAdd), ""); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionSword = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa" , 0 }, { pkMotionManager.NAME_RUN, "run.msa" , 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50 }, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa" , 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa" , 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_ONEHAND_SWORD); for (const auto& it : m_vecMotionSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseSword = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_ONEHAND_SWORD); for (const auto& it : m_vecMotionHorseSword) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_onehand_sword/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameShaman(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_COMBO_ATTACK_1, "attack.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack_1.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { pkMotionManager.NAME_SKILL + 1, "bipabu.msa" }, { pkMotionManager.NAME_SKILL + 2, "yongpa.msa" }, { pkMotionManager.NAME_SKILL + 3, "paeryong.msa" }, { pkMotionManager.NAME_SKILL + 4, "hosin_target.msa" }, { pkMotionManager.NAME_SKILL + 5, "boho_target.msa" }, { pkMotionManager.NAME_SKILL + 6, "gicheon_target.msa" }, { pkMotionManager.NAME_SKILL + 16, "noejeon.msa" }, { pkMotionManager.NAME_SKILL + 17, "byeorak.msa" }, { pkMotionManager.NAME_SKILL + 18, "pokroe.msa" }, { pkMotionManager.NAME_SKILL + 19, "jeongeop_target.msa" }, { pkMotionManager.NAME_SKILL + 20, "kwaesok_target.msa" }, { pkMotionManager.NAME_SKILL + 21, "jeungryeok_target.msa" }, { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "bipabu" }, { 2, "yongpa" }, { 3, "paeryong" }, { 4, "hosin" }, { 5, "boho" }, { 6, "gicheon" }, { 16, "noejeon" }, { 17, "byeorak" }, { 18, "pokroe" }, { 19, "jeongeop" }, { 20, "kwaesok" }, { 21, "jeungryeok" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 1; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i + 1); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionFan = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50,}, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50, }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50,}, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50, }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FAN); for (const auto& it : m_vecMotionFan) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fan/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FAN, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionBell = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 50,}, { pkMotionManager.NAME_DAMAGE, "damage_1.msa", 50, }, { pkMotionManager.NAME_DAMAGE_BACK, "damage_2.msa", 50,}, { pkMotionManager.NAME_DAMAGE_BACK, "damage_3.msa", 50, }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_BELL); for (const auto& it : m_vecMotionBell) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "bell/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_BELL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait_1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait_2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseFan = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_FAN); for (const auto& it : m_vecMotionHorseFan) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_fan/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_FAN, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_FAN, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); std::vector<SMotion> m_vecMotionHorseBell = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_BELL); for (const auto& it : m_vecMotionHorseBell) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_bell/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_BELL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_BELL, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right"); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON_LEFT, "equip_left"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameWolfman(DWORD dwRace, char stFolder[FILE_MAX_NUM]) { CRaceManager& pkManager = CRaceManager::Instance(); pkManager.SelectRace(dwRace); if (!LoadNewGeneralMotion(stFolder)) return false; CRaceData* pRaceData = pkManager.GetSelectedRaceDataPointer(); if (!pRaceData) return false; if (!pRaceData->SetMotionRandomWeight(pkMotionManager.MODE_GENERAL, pkMotionManager.NAME_WAIT, 0, 50)) return false; std::vector<SMotion> m_vecMotionGeneral = { { pkMotionManager.NAME_WAIT, "wait1.msa", 30 }, { pkMotionManager.NAME_WAIT, "wait2.msa", 20 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack1.msa", 50 }, { pkMotionManager.NAME_COMBO_ATTACK_1, "attack2.msa", 50 }, }; char szFileName[FILE_MAX_NUM]; pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionGeneral) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "general/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionSkill = { { GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa", 0 }, { GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa", 0 }, { GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa", 0 }, { GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa", 0 }, { GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa", 0 }, { GUILD_SKILL_MAGICUP, "guild_jumunsul.msa", 0 }, }; std::vector<std::pair<BYTE, const char*>> m_vecSkillName = { { 1, "split_slash" }, { 2, "wind_death" }, { 3, "reef_attack" }, { 4, "wreckage" }, { 5, "red_possession" }, { 6, "blue_possession" }, }; char szSkillName[FILE_MAX_NUM]; char szSkillAdd[4] = ""; for (WORD i = 0; i < CPythonSkill::SKILL_EFFECT_COUNT; i++) { for (auto& it : m_vecSkillName) { SMotion motion; motion.wMotionIndex = pkMotionManager.NAME_SKILL + (i * CPythonSkill::SKILL_GRADEGAP) + it.first; motion.byPercentage = 0; if (i > 0) snprintf(szSkillAdd, sizeof(szSkillAdd), "_%d", i); else snprintf(szSkillAdd, sizeof(szSkillAdd), ""); snprintf(motion.stName, sizeof(motion.stName), "%s%s.msa", it.second, szSkillAdd); m_vecMotionSkill.push_back(motion); } } pRaceData->RegisterMotionMode(pkMotionManager.MODE_GENERAL); for (const auto& it : m_vecMotionSkill) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "skill/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_GENERAL, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, 1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); RegisterEmotionAnis(stFolder); std::vector<SMotion> m_vecMotionClaw = { { pkMotionManager.NAME_WAIT, "wait.msa", 50 }, { pkMotionManager.NAME_WAIT, "wait.msa", 30 }, { pkMotionManager.NAME_WAIT, "wait.msa", 20 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "front_damage.msa", 50,}, { pkMotionManager.NAME_DAMAGE, "front_damage1.msa", 50, }, { pkMotionManager.NAME_DAMAGE_BACK, "back_damage.msa", 50,}, { pkMotionManager.NAME_DAMAGE_BACK, "back_damage1.msa", 50, }, { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_4, "combo_04.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_5, "combo_05.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_6, "combo_06.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_7, "combo_07.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_CLAW); for (const auto& it : m_vecMotionClaw) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "claw/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_CLAW, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, 4); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_1, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_4); pRaceData->ReserveComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, 5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_2, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_7); pRaceData->ReserveComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, 6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_4, pkMotionManager.NAME_COMBO_ATTACK_5); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_5, pkMotionManager.NAME_COMBO_ATTACK_6); pRaceData->RegisterComboAttack(pkMotionManager.MODE_CLAW, COMBO_TYPE_3, COMBO_INDEX_6, pkMotionManager.NAME_COMBO_ATTACK_4); std::vector<SMotion> m_vecMotionFishing = { { pkMotionManager.NAME_WAIT, "wait.msa", 0 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_FISHING_THROW, "throw.msa", 0 }, { pkMotionManager.NAME_FISHING_WAIT, "fishing_wait.msa", 0 }, { pkMotionManager.NAME_FISHING_STOP, "fishing_cancel.msa", 0 }, { pkMotionManager.NAME_FISHING_REACT, "fishing_react.msa", 0 }, { pkMotionManager.NAME_FISHING_CATCH, "fishing_catch.msa", 0 }, { pkMotionManager.NAME_FISHING_FAIL, "fishing_fail.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_FISHING); for (const auto& it : m_vecMotionFishing) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "fishing/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_FISHING, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorse = { { pkMotionManager.NAME_WAIT, "wait.msa", 90 }, { pkMotionManager.NAME_WAIT, "wait1.msa", 9 }, { pkMotionManager.NAME_WAIT, "wait2.msa", 1 }, { pkMotionManager.NAME_WALK, "walk.msa", 0 }, { pkMotionManager.NAME_RUN, "run.msa", 0 }, { pkMotionManager.NAME_DAMAGE, "front_damage.msa", 0 }, { pkMotionManager.NAME_DAMAGE_BACK, "front_damage.msa", 0 }, { pkMotionManager.NAME_DEAD, "dead.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_charge.msa", 0 }, { HORSE_SKILL_CHARGE, "skill_splash.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE); for (const auto& it : m_vecMotionHorse) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE, it.wMotionIndex, szFileName, it.byPercentage); } std::vector<SMotion> m_vecMotionHorseClaw = { { pkMotionManager.NAME_COMBO_ATTACK_1, "combo_01.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_2, "combo_02.msa", 0 }, { pkMotionManager.NAME_COMBO_ATTACK_3, "combo_03.msa", 0 }, { HORSE_SKILL_WILDATTACK, "skill_wildattack.msa", 0 }, }; pRaceData->RegisterMotionMode(pkMotionManager.MODE_HORSE_CLAW); for (const auto& it : m_vecMotionHorseClaw) { snprintf(szFileName, sizeof(szFileName), "%s%s%s", stFolder, "horse_claw/", it.stName); pRaceData->RegisterMotionData(pkMotionManager.MODE_HORSE_CLAW, it.wMotionIndex, szFileName, it.byPercentage); } pRaceData->ReserveComboAttack(pkMotionManager.MODE_HORSE_CLAW, COMBO_TYPE_1, 3); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_CLAW, COMBO_TYPE_1, COMBO_INDEX_1, pkMotionManager.NAME_COMBO_ATTACK_1); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_CLAW, COMBO_TYPE_1, COMBO_INDEX_2, pkMotionManager.NAME_COMBO_ATTACK_2); pRaceData->RegisterComboAttack(pkMotionManager.MODE_HORSE_CLAW, COMBO_TYPE_1, COMBO_INDEX_3, pkMotionManager.NAME_COMBO_ATTACK_3); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON, "equip_right_weapon"); pRaceData->RegisterAttachingBoneName(CRaceData::PART_WEAPON_LEFT, "equip_left_weapon"); #ifdef ENABLE_ACCE_COSTUME_SYSTEM pRaceData->RegisterAttachingBoneName(CRaceData::PART_ACCE, "Bip01 Spine2"); #endif return true; } const bool CPlayerSettingsModule::LoadGameSound() { std::vector<TSound> m_vecSound = { { CPythonItem::USESOUND_DEFAULT, "sound/ui/drop.wav" }, { CPythonItem::USESOUND_ACCESSORY, "sound/ui/equip_ring_amulet.wav" }, { CPythonItem::USESOUND_ARMOR, "sound/ui/equip_metal_armor.wav" }, { CPythonItem::USESOUND_BOW, "sound/ui/equip_bow.wav" }, { CPythonItem::USESOUND_WEAPON, "sound/ui/equip_metal_weapon.wav" }, { CPythonItem::USESOUND_POTION, "sound/ui/eat_potion.wav" }, { CPythonItem::USESOUND_PORTAL, "sound/ui/potal_scroll.wav" }, }; CPythonItem& rkItem = CPythonItem::Instance(); for (const auto &it : m_vecSound) rkItem.SetUseSoundFileName(it.dwType, it.stName); std::vector<TSound> m_vecDropSound = { { CPythonItem::DROPSOUND_DEFAULT, "sound/ui/drop.wav" }, { CPythonItem::DROPSOUND_ACCESSORY, "sound/ui/equip_ring_amulet.wav" }, { CPythonItem::DROPSOUND_ARMOR, "sound/ui/equip_metal_armor.wav" }, { CPythonItem::DROPSOUND_BOW, "sound/ui/equip_bow.wav" }, { CPythonItem::DROPSOUND_WEAPON, "sound/ui/equip_metal_weapon.wav" }, }; for (const auto &it : m_vecDropSound) rkItem.SetDropSoundFileName(it.dwType, it.stName); return true; } const bool CPlayerSettingsModule::LoadGameSkill() { return true; } PyObject* cpsmInitData(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadInitData(); return Py_BuildNone(); } PyObject* cpsmLoadGameSound(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameSound(); return Py_BuildNone(); } PyObject* cpsmLoadGameEffect(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameEffect(); return Py_BuildNone(); } PyObject* cpsmLoadGameWarrior(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameWarrior(CPlayerSettingsModule::RACE_WARRIOR_M, "d:/ymir work/pc/warrior/"); CPlayerSettingsModule::LoadGameWarrior(CPlayerSettingsModule::RACE_WARRIOR_W, "d:/ymir work/pc2/warrior/"); return Py_BuildNone(); } PyObject* cpsmLoadGameAssassin(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameAssassin(CPlayerSettingsModule::RACE_ASSASSIN_W, "d:/ymir work/pc/assassin/"); CPlayerSettingsModule::LoadGameAssassin(CPlayerSettingsModule::RACE_ASSASSIN_M, "d:/ymir work/pc2/assassin/"); return Py_BuildNone(); } PyObject* cpsmLoadGameSura(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameSura(CPlayerSettingsModule::RACE_SURA_M, "d:/ymir work/pc/sura/"); CPlayerSettingsModule::LoadGameSura(CPlayerSettingsModule::RACE_SURA_W, "d:/ymir work/pc2/sura/"); return Py_BuildNone(); } PyObject* cpsmLoadGameShaman(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameShaman(CPlayerSettingsModule::RACE_SHAMAN_W, "d:/ymir work/pc/shaman/"); CPlayerSettingsModule::LoadGameShaman(CPlayerSettingsModule::RACE_SHAMAN_M, "d:/ymir work/pc2/shaman/"); return Py_BuildNone(); } PyObject* cpsmLoadGameWolfman(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameWolfman(CPlayerSettingsModule::RACE_WOLFMAN_M, "d:/ymir work/pc3/wolfman/"); return Py_BuildNone(); } PyObject* cpsmLoadGameSkill(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameSkill(); return Py_BuildNone(); } void initplayersettingsmodule() { static PyMethodDef s_methods[] = { { "InitData", cpsmInitData, METH_VARARGS }, { "LoadGameSound", cpsmLoadGameSound, METH_VARARGS }, { "LoadGameEffect", cpsmLoadGameEffect, METH_VARARGS }, { "LoadGameWarrior", cpsmLoadGameWarrior, METH_VARARGS }, { "LoadGameAssassin", cpsmLoadGameAssassin, METH_VARARGS }, { "LoadGameSura", cpsmLoadGameSura, METH_VARARGS }, { "LoadGameShaman", cpsmLoadGameShaman, METH_VARARGS }, { "LoadGameWolfman", cpsmLoadGameWolfman, METH_VARARGS }, { "LoadGameSkill", cpsmLoadGameSkill, METH_VARARGS }, { NULL, NULL, NULL }, }; PyObject* poModule = Py_InitModule("cpsm", s_methods); } #endif
Header File
Kod:#pragma once class CPlayerSettingsModule { public: enum EConfig { DUST_GAP = 250, HORSE_DUST_GAP = 500, RACE_WARRIOR_M = 0, RACE_ASSASSIN_W = 1, RACE_SURA_M = 2, RACE_SHAMAN_W = 3, RACE_WARRIOR_W = 4, RACE_ASSASSIN_M = 5, RACE_SURA_W = 6, RACE_SHAMAN_M = 7, RACE_WOLFMAN_M = 8, COMBO_TYPE_1 = 0, COMBO_TYPE_2 = 1, COMBO_TYPE_3 = 2, COMBO_INDEX_1 = 0, COMBO_INDEX_2 = 1, COMBO_INDEX_3 = 2, COMBO_INDEX_4 = 3, COMBO_INDEX_5 = 4, COMBO_INDEX_6 = 5, FILE_MAX_NUM = 70, BONE_MAX_NUM = 24, }; private: typedef struct SEffect { UINT uiType; char stBone[BONE_MAX_NUM]; char stEffect[FILE_MAX_NUM]; } TEffect; typedef struct SRaceData { DWORD dwRace; char stMSM[FILE_MAX_NUM]; char stIntroMotion[FILE_MAX_NUM]; } TRaceData; typedef struct SMotion { int wMotionIndex; char stName[FILE_MAX_NUM]; BYTE byPercentage; } TMotion; typedef struct SFly { DWORD dwIndex; BYTE byType; char stName[FILE_MAX_NUM]; } TFly; typedef struct SSound { DWORD dwType; char stName[FILE_MAX_NUM]; } TSound; public: const static bool LoadInitData(); const static bool LoadGameEffect(); const static bool RegisterEmotionAnis(char stFolder[FILE_MAX_NUM]); const static bool LoadGeneralMotion(char stFolder[FILE_MAX_NUM]); const static bool LoadNewGeneralMotion(char stFolder[FILE_MAX_NUM]); const static bool LoadGameWarrior(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameAssassin(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameSura(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameShaman(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameWolfman(DWORD dwRace, char stFolder[FILE_MAX_NUM]); const static bool LoadGameSound(); const static bool LoadGameSkill(); };
1 Saatimi aldi, Owsapin 4.9.7 uyumlu.
- Katılım
- 8 Ocak 2011
- Konular
- 399
- Mesajlar
- 2,667
- Çözüm
- 24
- Online süresi
- 2mo 28d
- Reaksiyon Skoru
- 685
- Altın Konu
- 4
- Başarım Puanı
- 252
- MmoLira
- 6,627
- DevLira
- 51
Virustotal eklendi, paylaşım için teşekkürler. Sevgiler, saygılar...
- Katılım
- 4 Şub 2010
- Konular
- 140
- Mesajlar
- 782
- Çözüm
- 15
- Online süresi
- 2mo 11d
- Reaksiyon Skoru
- 115
- Altın Konu
- 0
- TM Yaşı
- 16 Yıl 4 Ay 5 Gün
- Başarım Puanı
- 169
- MmoLira
- 6,579
- DevLira
- 0
playersettingmodule nin düzenlenmiş halini atabilicek varmı .
- Katılım
- 19 May 2018
- Konular
- 54
- Mesajlar
- 409
- Çözüm
- 1
- Online süresi
- 2mo 16d
- Reaksiyon Skoru
- 271
- Altın Konu
- 0
- TM Yaşı
- 8 Yıl 18 Gün
- Başarım Puanı
- 153
- MmoLira
- 790
- DevLira
- 0
Çok düzenleme gerektiriyor, lycan zaten yok sistemde eklemek gerek eklentilerinize göre eklemelerinizi yapmanız gerek ben yaptım test için bariz farklar var kullanmanızı tavsiye ederim
Ama dikkat edin eksik bir satır çok sorun oluşturur tek tek tüm playersettingsmoduleyi aktarmanız gerek.
Ama dikkat edin eksik bir satır çok sorun oluşturur tek tek tüm playersettingsmoduleyi aktarmanız gerek.- Katılım
- 30 Haz 2020
- Konular
- 1
- Mesajlar
- 40
- Online süresi
- 6d 4h
- Reaksiyon Skoru
- 33
- Altın Konu
- 0
- TM Yaşı
- 5 Yıl 11 Ay 11 Gün
- Başarım Puanı
- 33
- MmoLira
- 285
- DevLira
- 3
He aynen cok düzenleme gerekiyorÇok düzenleme gerektiriyor, lycan zaten yok sistemde eklemek gerek eklentilerinize göre eklemelerinizi yapmanız gerek ben yaptım test için bariz farklar var kullanmanızı tavsiye ederimAma dikkat edin eksik bir satır çok sorun oluşturur tek tek tüm playersettingsmoduleyi aktarmanız gerek.

sakaci seni. Kendi filesine göre ayarlicaksin tabiki bu ama gayet normal birseyŞu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 24
- Görüntüleme
- 3K
- Cevaplar
- 9
- Görüntüleme
- 511
- Cevaplar
- 11
- Görüntüleme
- 2K
- Cevaplar
- 17
- Görüntüleme
- 1K




