-
Posts
839 -
Joined
-
Days Won
393 -
Feedback
100%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by xP3NG3Rx
-
-
Why do you needed this?
-
Cool idea
Only the mute and the collective sending method are missing.
For example: send a message to a person instead of everyone. Also mute that person who spamming all the time or something like that.- 1
-
-
Holly kebab! This code looks like chernobyl.
- 4
- 29
-
Guys you flew away with with the prices a little bit.
There are many of examples in the source how to do it even if you have close to zero knowledge how to start it, if you have logical thinking you can deal with it. You just have to think in advance two steps or maybe even more what the modification will touch.
Of course it depends on the time you spend with it, if your are noobie and it took like 2 months to make it work, still cannot cost more then it deserve.
Doesn't matter if it is communicating via packets instead of chatcommand or whatever(however I hate chatcommand based systems), the people will think like this "why would I pay this much if I can use it for free the same maybe with less content" they are giving a shit about how the code looks like if it works, it must to be work and that's it. About the high prices again, I can understand it, if someone will buy it for that high price for sure (s)he will not publish it for free even if his/her server closes. And let me explain my opinion about the official pet system: complete nonsense on private servers, some old or new private server had better then that, but nowadays that is the hype, everyone is trying to copy the official server instead of making own content which might be better then that for sure. Ofc if you are like me(maximalist) and you see a code like the code of the official pet system on public you wouldn't know you should cry or just run away and delete it.Back to the original topic, this what I saw on the video is not a pet system. Might be an extended clone system as someone told you before.
To sell it? Make no sense, there are couple of public ones with less opportunities but doing the same, so as I've told you before, why would anyone buy it?
Even if they could and would buy it, the clever ones would ask a developer to extend the public code with your stuff for less money.
My opinion about these kind of contents: It kills the cooperative, multiplayer gameplay feeling which drives the private servers to death.
All of you can think about it, if you would like to open a private server. If you don't need a support character, who could be your friend or a stranger person, you gonna lose after a while players time by time when they get bored.- 7
-
There will be always negative people no matter what, but could you just stop insult him?
Thank you anyway, I just don't understand webzen about this content; selfbuf skill which cause damage around the character which is an archer, a far range attacker.- 1
- 1
-
-
All modified files from the last update v19.5.7.1
Included the new cube window gui.
Protos are dumped into XML format.
Cythonized and builtin modules are dumped into metadata.
- 25
- 1
- 1
- 1
- 1
- 1
- 11
- 2
- 30
-
No, it isn't like that. It's a local database inside the client only.
Anyway, I don't recommend to use that lib either , anytime when you use it, it generates a small freeze during it saves the database.
I'm using it for my accountboard but I will change it later.
Here is a small example to update the last used account to place it to the top of the list during the Connect method:con = sqlite3.connect("lib/sqlite3/db.cpd") cur = con.cursor() try: cur.execute("UPDATE accounts SET last_use=? WHERE login = ?;", (time.time(), id,)) except sqlite3.Error, e: dbg.TraceError("An error occurred during updating the last_use field:" + e.args[0]) con.commit() cur.close() con.close()
- 4
-
The CHARACTER::UpdatePacket function supposed to get called in the CItem::ModifyPoints where it attaches the hair.
- 1
-
Forever fav. Billy
Spoileroh, my god
Spoiler- 2
-
Nope, I haven't finished yet the effect and the mesh(mde) scaling.
Although this topic is not a promo your stuff .
- 1
-
Hello everyone.
In this small guide I'm gonna show you how to load the new Aura effects in automatically from the item_list.txt
Spoiler1.0.) Open GameLib/ItemData.h
1.1.) Add this anywhere into the class CItemData as public (recommended below of the enums there)#ifdef ENABLE_AURA_SYSTEM enum EAuraMisc { AURA_GRADE_MAX_NUM = 6, }; #endif
1.2.) Add the followings at the bottom of the class CItemData:
#ifdef ENABLE_AURA_SYSTEM protected: DWORD m_dwAuraEffectID; public: void SetAuraEffectID(const char* szAuraEffectPath); DWORD GetAuraEffectID() const { return m_dwAuraEffectID; } #endif
2.0.) Open GameLib/ItemData.cpp
2.1.) Add the following code at the top of the file where the includes are:#ifdef ENABLE_AURA_SYSTEM #include "../EffectLib/EffectManager.h" #endif
2.2.) Paste this new function anywhere you want:
#ifdef ENABLE_AURA_SYSTEM void CItemData::SetAuraEffectID(const char* szAuraEffectPath) { if (szAuraEffectPath) CEffectManager::Instance().RegisterEffect2(szAuraEffectPath, &m_dwAuraEffectID); } #endif
2.2.) Last put this code into the CItemData::Clear function:
#ifdef ENABLE_AURA_SYSTEM m_dwAuraEffectID = 0; #endif
3.0.) Open GameLib/ItemManager.cpp
3.1.) Edit your LoadItemScale function like this way: (I do not know how your look like so you must change a bit probably depends how your code looks like)#ifdef ENABLE_AURA_SYSTEM CItemData* pItemData = MakeItemData(dwItemVNum); BYTE bGradeMax = CItemData::SASH_GRADE_MAX_NUM; if (pItemData->GetType() == CItemData::ITEM_TYPE_COSTUME && pItemData->GetSubType() == CItemData::COSTUME_AURA) bGradeMax = CItemData::AURA_GRADE_MAX_NUM; for (int i = 0; i < bGradeMax; ++i) #else for (int i = 0; i < CItemData::SASH_GRADE_MAX_NUM; ++i) #endif { pItemData = MakeItemData(dwItemVNum + i); if (pItemData) pItemData->SetItemTableScaleData(byJob, bySex, xScale, yScale, zScale, xPosScale, yPosScale, zPosScale); }
3.2.) In the LoadItemList function find this:
if (4 == TokenVector.size()) { const std::string& c_rstrModelFileName = TokenVector[3]; pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str()); }
3.3.) And replace it with this one:
if (4 == TokenVector.size()) { #ifdef ENABLE_AURA_SYSTEM if (!strcmp(c_rstrType.c_str(), "AURA")) { const std::string& c_rstrAuraEffectFileName = TokenVector[3]; pItemData->SetAuraEffectID(c_rstrAuraEffectFileName.c_str()); pItemData->SetDefaultItemData(c_rstrIcon.c_str()); } else { const std::string& c_rstrModelFileName = TokenVector[3]; pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str()); } #else const std::string& c_rstrModelFileName = TokenVector[3]; pItemData->SetDefaultItemData(c_rstrIcon.c_str(), c_rstrModelFileName.c_str()); #endif }
I am not gonna release more of this system, anyway I haven't reversed yet completely, but if you wanna see, how to attach the effect to your character when you equip the item here is an example:
bool CInstanceBase::SetAura(DWORD eAura) { if (!IsPC() || IsPoly() || __IsShapeAnimalWear()) return false; m_GraphicThingInstance.ChangePart(CRaceData::PART_AURA, eAura); if (!eAura) { if (m_auraRefineEffect) { __DetachEffect(m_auraRefineEffect); m_auraRefineEffect = 0; } m_adwPart[CRaceData::PART_AURA] = 0; return true; } CItemData* pItemData; if (!CItemManager::Instance().GetItemDataPointer(eAura, &pItemData)) { if (m_auraRefineEffect) { __DetachEffect(m_auraRefineEffect); m_auraRefineEffect = 0; } m_adwPart[CRaceData::PART_AURA] = 0; return true; } BYTE byRace = (BYTE)GetRace(); BYTE byJob = (BYTE)RaceToJob(byRace); BYTE bySex = (BYTE)RaceToSex(byRace); D3DXVECTOR3 scalePos = pItemData->GetItemScalePosition(byJob, bySex); if (IsMountingHorseOnly() && byJob != NRaceData::JOB_WOLFMAN) scalePos.z += 15.0f; m_auraRefineEffect = m_GraphicThingInstance.AttachEffectByID(NULL, "Bip01 Spine2", pItemData->GetAuraEffectID(), NULL, 0, FALSE, pItemData->GetItemScale(byJob, bySex).z, &scalePos); m_adwPart[CRaceData::PART_AURA] = eAura; return true; }
Oh, yes. There are some of argument mistmatches because of the scaling and repositioning of the effects, what you can just delete.
Have fun with it- 20
-
Spoiler
- 1
-
-
Hello boys and girls!
With this small release you will be able to check every single affects on your character. The official server implemented this with their autohunt system to check the duration of taus and other potions.
I had to do the same for the dragon soul I have decided to make it. After a small trip in the official binary, I figured out my solution, here it is:Spoiler1.0.) Open the Client/UserInterface/PythonPlayer.h file.
1.1.) Then paste the following code to the end of the CPythonPlayer class:
(By unknown reason they put this into the CPythonItem class, idk why. tbh idc)protected: typedef std::vector<TPacketAffectElement> TAffectDataVector; TAffectDataVector m_mapAffectData; public: void AddAffect(DWORD dwType, TPacketAffectElement kElem); void RemoveAffect(DWORD dwType, BYTE bApplyOn); int GetAffectDataIndex(DWORD dwType, BYTE bApplyOn); TPacketAffectElement GetAffectData(DWORD dwType, BYTE bApplyOn);
2.0.) Now open the Client/UserInterface/PythonPlayer.cpp file.
2.1.) Jump to the function by name: CPythonPlayer::Clear and add the following line into the function(my advice: to the bottom as always):m_mapAffectData.clear();
2.2.) And last paste these anywhere you want:
void CPythonPlayer::AddAffect(DWORD dwType, TPacketAffectElement kElem) { int iAffIndex = GetAffectDataIndex(dwType, kElem.bPointIdxApplyOn); if (iAffIndex != -1) { m_mapAffectData.at(iAffIndex) = kElem; } else { m_mapAffectData.push_back(kElem); } } void CPythonPlayer::RemoveAffect(DWORD dwType, BYTE bApplyOn) { for (TAffectDataVector::iterator it = m_mapAffectData.begin(); it != m_mapAffectData.end(); ++it) { TPacketAffectElement elem = *it; if (elem.dwType == dwType && (bApplyOn == 0 || bApplyOn == elem.bPointIdxApplyOn)) { m_mapAffectData.erase(it); break; } } } int CPythonPlayer::GetAffectDataIndex(DWORD dwType, BYTE bApplyOn) { int ret = -1, i = 0; for (TAffectDataVector::iterator it = m_mapAffectData.begin(); it != m_mapAffectData.end(); ++it, ++i) { TPacketAffectElement elem = *it; if (elem.dwType == dwType && (bApplyOn == 0 || bApplyOn == elem.bPointIdxApplyOn)) { ret = i; break; } } return ret; } TPacketAffectElement CPythonPlayer::GetAffectData(DWORD dwType, BYTE bApplyOn) { TPacketAffectElement ret; memset(&ret, 0, sizeof(TPacketAffectElement)); for (TAffectDataVector::iterator it = m_mapAffectData.begin(); it != m_mapAffectData.end(); ++it) { TPacketAffectElement elem = *it; if (elem.dwType == dwType && (bApplyOn == 0 || bApplyOn == elem.bPointIdxApplyOn)) { ret = elem; break; } } return ret; }
3.0.) Next, open the Client/UserInterface/CPythonNetworkStreamPhaseGame.cpp file.
3.1.) Extend this function: CPythonNetworkStream::RecvAffectAddPacket with this:CPythonPlayer::instance().AddAffect(rkElement.dwType, kAffectAdd.elem);
3.2.) Do the same into the CPythonNetworkStream::RecvAffectRemovePacket function with this:
CPythonPlayer::instance().RemoveAffect(kAffectRemove.dwType, kAffectRemove.bApplyOn);
4.0.) Open the Client/UserInterface/PythonPlayerModule.cpp file.
4.1.) Add this new function to the module:PyObject * playerCheckAffect(PyObject* poSelf, PyObject* poArgs) { DWORD dwType; if (!PyTuple_GetUnsignedLong(poArgs, 0, &dwType)) return Py_BadArgument(); BYTE bApplyOn; if (!PyTuple_GetByte(poArgs, 1, &bApplyOn)) return Py_BadArgument(); int iAffIndex = CPythonPlayer::Instance().GetAffectDataIndex(dwType, bApplyOn); return Py_BuildValue("b", iAffIndex != -1); } { "CheckAffect", playerCheckAffect, METH_VARARGS },
How to check if the first or the second deck of the dragon soul is activated?
if player.CheckAffect(chr.NEW_AFFECT_DRAGON_SOUL_DECK1, 0): print("Hurray! The first deck is active now") elif player.CheckAffect(chr.NEW_AFFECT_DRAGON_SOUL_DECK2, 0): print("Oh, gosh! The second deck is activated, be careful") else: print("Without activated dragon soul you are weak....")
If you find any problem with it, just let me know. I did test it, but not that much.
- 4
- 1
- 22
-
Spoiler
- 1
-
Spoiler
//<srv&client:packet.h #ifdef ENABLE_REVIVE_BOARD_RENEWAL enum EReviveTypes { REVIVE_TYPE_HERE, REVIVE_TYPE_TOWN, REVIVE_TYPE_AUTO_TOWN, REVIVE_TYPE_MAX }; #endif typedef struct packet_dead { #ifdef ENABLE_REVIVE_BOARD_RENEWAL packet_dead() { memset(&reviveTime, 0, sizeof(reviveTime)); } #endif BYTE header; DWORD vid; #ifdef ENABLE_REVIVE_BOARD_RENEWAL BYTE reviveTime[REVIVE_TYPE_MAX]; #endif } TPacketGCDead; //> //<srv:char.h #ifdef ENABLE_REVIVE_BOARD_RENEWAL public: BYTE CalcReviveTimeDelay(uint8_t bType); #endif //> //<srv:char.cpp #ifdef ENABLE_REVIVE_BOARD_RENEWAL BYTE CHARACTER::CalcReviveTimeDelay(uint8_t bType) { if (!m_pkDeadEvent) return 0; BYTE bTimeToDead = BYTE(event_time(m_pkDeadEvent) / passes_per_sec); if (bType == REVIVE_TYPE_AUTO_TOWN) return bTimeToDead-7; if (!test_server && bType == REVIVE_TYPE_HERE && (!GetWarMap() || GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG)) { if (IsHack(false) && !CThreeWayWar::instance().IsSungZiMapIndex(GetMapIndex())) return bTimeToDead - (180 - g_nPortalLimitTime); if (bTimeToDead > 170) return bTimeToDead - 170; } if (IsHack(false) && ((!GetWarMap() || GetWarMap()->GetType() == GUILD_WAR_TYPE_FLAG) || !CThreeWayWar::instance().IsSungZiMapIndex(GetMapIndex()))) return bTimeToDead - (180 - g_nPortalLimitTime); if (bTimeToDead > 173) return bTimeToDead - 173; return 0; } #endif //> //<srv:char_battle.cpp #ifdef ENABLE_REVIVE_BOARD_RENEWAL TPacketGCDead pack; pack.header = HEADER_GC_DEAD; pack.vid = m_vid; pack.reviveTime[REVIVE_TYPE_HERE] = CalcReviveTimeDelay(REVIVE_TYPE_HERE); pack.reviveTime[REVIVE_TYPE_TOWN] = CalcReviveTimeDelay(REVIVE_TYPE_TOWN); pack.reviveTime[REVIVE_TYPE_AUTO_TOWN] = CalcReviveTimeDelay(REVIVE_TYPE_AUTO_TOWN); PacketAround(&pack, sizeof(pack)); #endif //> //<srv:char_horse.cpp // You can skip it. //> //<client:PythonNetworkStreamPhaseGame.cpp if (false == pkInstMain->GetDuelMode()) { #ifdef ENABLE_REVIVE_BOARD_RENEWAL PyObject *times = PyTuple_New(REVIVE_TYPE_MAX); PyTuple_SetItem(times, 0, PyInt_FromLong(DeadPacket.reviveTime[REVIVE_TYPE_HERE])); PyTuple_SetItem(times, 1, PyInt_FromLong(DeadPacket.reviveTime[REVIVE_TYPE_TOWN])); PyTuple_SetItem(times, 2, PyInt_FromLong(DeadPacket.reviveTime[REVIVE_TYPE_AUTO_TOWN])); PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("(O)", times)); #else PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()")); #endif //> //<srv:PythonPlayerModule.cpp #ifdef ENABLE_REVIVE_BOARD_RENEWAL PyModule_AddIntConstant(poModule, "REVIVE_TYPE_HERE", REVIVE_TYPE_HERE); PyModule_AddIntConstant(poModule, "REVIVE_TYPE_TOWN", REVIVE_TYPE_TOWN); PyModule_AddIntConstant(poModule, "REVIVE_TYPE_AUTO_TOWN", REVIVE_TYPE_AUTO_TOWN); PyModule_AddIntConstant(poModule, "REVIVE_TYPE_MAX", REVIVE_TYPE_MAX); #endif //> //<root:game.py if app.ENABLE_REVIVE_BOARD_RENEWAL: def OnGameOver(self, times): self.CloseTargetBoard() self.OpenRestartDialog(times) def OpenRestartDialog(self, times): self.interface.OpenRestartDialog(times) else: def OnGameOver(self): self.CloseTargetBoard() self.OpenRestartDialog() def OpenRestartDialog(self): self.interface.OpenRestartDialog() //> //<root:interfaceModule.py if app.ENABLE_REVIVE_BOARD_RENEWAL: def OpenRestartDialog(self, times): self.dlgRestart.OpenDialog(times) self.dlgRestart.SetTop() else: def OpenRestartDialog(self): self.dlgRestart.OpenDialog() self.dlgRestart.SetTop() //> //<root:localeInfo.py def SecondToMS(time): if time < 60: return "%d%s" % (time, SECOND) second = int(time % 60) minute = int((time / 60) % 60) text = "" if minute > 0: text += str(minute) + MINUTE if minute > 0: text += " " if second > 0: text += str(second) + SECOND return text //> //<locale/locale_game.txt REVIVE_AUTO_TOWN_MESSAGE Autorestart at town in: {} //>
You can follow the tutorial from the original post, I have changed some names, you can compare them.
- 9
- 2
- 19
-
Spoiler
{'name': 'APPLY_ACCEDRAIN_RATE', 'type': 'int', 'value': 97}, {'name': 'APPLY_ALIGNMENT_DAMAGE_BONUS', 'type': 'int', 'value': 217}, {'name': 'APPLY_ANTI_CRITICAL_PCT', 'type': 'int', 'value': 90}, {'name': 'APPLY_ANTI_PENETRATE_PCT', 'type': 'int', 'value': 91}, {'name': 'APPLY_ATTBONUS_ANIMAL', 'type': 'int', 'value': 18}, {'name': 'APPLY_ATTBONUS_ASSASSIN', 'type': 'int', 'value': 60}, {'name': 'APPLY_ATTBONUS_BELL', 'type': 'int', 'value': 111}, {'name': 'APPLY_ATTBONUS_BOW', 'type': 'int', 'value': 113}, {'name': 'APPLY_ATTBONUS_CLAW', 'type': 'int', 'value': 114}, {'name': 'APPLY_ATTBONUS_CZ', 'type': 'int', 'value': 105}, {'name': 'APPLY_ATTBONUS_DAGGER', 'type': 'int', 'value': 110}, {'name': 'APPLY_ATTBONUS_DESERT', 'type': 'int', 'value': 107}, {'name': 'APPLY_ATTBONUS_DEVIL', 'type': 'int', 'value': 22}, {'name': 'APPLY_ATTBONUS_FAN', 'type': 'int', 'value': 112}, {'name': 'APPLY_ATTBONUS_HUMAN', 'type': 'int', 'value': 17}, {'name': 'APPLY_ATTBONUS_INSECT', 'type': 'int', 'value': 106}, {'name': 'APPLY_ATTBONUS_MILGYO', 'type': 'int', 'value': 20}, {'name': 'APPLY_ATTBONUS_MONSTER', 'type': 'int', 'value': 63}, {'name': 'APPLY_ATTBONUS_ORC', 'type': 'int', 'value': 19}, {'name': 'APPLY_ATTBONUS_SHAMAN', 'type': 'int', 'value': 62}, {'name': 'APPLY_ATTBONUS_STONE', 'type': 'int', 'value': 214}, {'name': 'APPLY_ATTBONUS_SURA', 'type': 'int', 'value': 61}, {'name': 'APPLY_ATTBONUS_SWORD', 'type': 'int', 'value': 108}, {'name': 'APPLY_ATTBONUS_TWOHAND', 'type': 'int', 'value': 109}, {'name': 'APPLY_ATTBONUS_UNDEAD', 'type': 'int', 'value': 21}, {'name': 'APPLY_ATTBONUS_WARRIOR', 'type': 'int', 'value': 59}, {'name': 'APPLY_ATTBONUS_WOLFMAN', 'type': 'int', 'value': 94}, {'name': 'APPLY_ATT_GRADE_BONUS', 'type': 'int', 'value': 53}, {'name': 'APPLY_ATT_SPEED', 'type': 'int', 'value': 7}, {'name': 'APPLY_BLEEDING_PCT', 'type': 'int', 'value': 93}, {'name': 'APPLY_BLEEDING_REDUCE', 'type': 'int', 'value': 92}, {'name': 'APPLY_BLOCK', 'type': 'int', 'value': 27}, {'name': 'APPLY_BOW_DISTANCE', 'type': 'int', 'value': 52}, {'name': 'APPLY_CAST_SPEED', 'type': 'int', 'value': 9}, {'name': 'APPLY_CON', 'type': 'int', 'value': 3}, {'name': 'APPLY_COSTUME_ATTR_BONUS', 'type': 'int', 'value': 84}, {'name': 'APPLY_CRITICAL_PCT', 'type': 'int', 'value': 15}, {'name': 'APPLY_DAMAGE_HP_RECOVERY', 'type': 'int', 'value': 215}, {'name': 'APPLY_DAMAGE_SP_RECOVER', 'type': 'int', 'value': 26}, {'name': 'APPLY_DAMAGE_SP_RECOVERY', 'type': 'int', 'value': 216}, {'name': 'APPLY_DEF_GRADE_BONUS', 'type': 'int', 'value': 54}, {'name': 'APPLY_DEX', 'type': 'int', 'value': 6}, {'name': 'APPLY_DODGE', 'type': 'int', 'value': 28}, {'name': 'APPLY_ENCHANT_DARK', 'type': 'int', 'value': 104}, {'name': 'APPLY_ENCHANT_EARTH', 'type': 'int', 'value': 103}, {'name': 'APPLY_ENCHANT_ELECT', 'type': 'int', 'value': 99}, {'name': 'APPLY_ENCHANT_FIRE', 'type': 'int', 'value': 100}, {'name': 'APPLY_ENCHANT_ICE', 'type': 'int', 'value': 101}, {'name': 'APPLY_ENCHANT_WIND', 'type': 'int', 'value': 102}, {'name': 'APPLY_ENERGY', 'type': 'int', 'value': 82}, {'name': 'APPLY_EXP_DOUBLE_BONUS', 'type': 'int', 'value': 43}, {'name': 'APPLY_FIFTH_ATTRIBUTE_BONUS', 'type': 'int', 'value': 227}, {'name': 'APPLY_FIRST_ATTRIBUTE_BONUS', 'type': 'int', 'value': 223}, {'name': 'APPLY_FOURTH_ATTRIBUTE_BONUS', 'type': 'int', 'value': 226}, {'name': 'APPLY_GOLD_DOUBLE_BONUS', 'type': 'int', 'value': 44}, {'name': 'APPLY_HIT_BUFF_ENCHANT_DARK', 'type': 'int', 'value': 157}, {'name': 'APPLY_HIT_BUFF_ENCHANT_EARTH', 'type': 'int', 'value': 158}, {'name': 'APPLY_HIT_BUFF_ENCHANT_ELEC', 'type': 'int', 'value': 155}, {'name': 'APPLY_HIT_BUFF_ENCHANT_FIRE', 'type': 'int', 'value': 153}, {'name': 'APPLY_HIT_BUFF_ENCHANT_ICE', 'type': 'int', 'value': 154}, {'name': 'APPLY_HIT_BUFF_ENCHANT_WIND', 'type': 'int', 'value': 156}, {'name': 'APPLY_HIT_BUFF_RESIST_DARK', 'type': 'int', 'value': 163}, {'name': 'APPLY_HIT_BUFF_RESIST_EARTH', 'type': 'int', 'value': 164}, {'name': 'APPLY_HIT_BUFF_RESIST_ELEC', 'type': 'int', 'value': 161}, {'name': 'APPLY_HIT_BUFF_RESIST_FIRE', 'type': 'int', 'value': 159}, {'name': 'APPLY_HIT_BUFF_RESIST_ICE', 'type': 'int', 'value': 160}, {'name': 'APPLY_HIT_BUFF_RESIST_WIND', 'type': 'int', 'value': 162}, {'name': 'APPLY_HP_REGEN', 'type': 'int', 'value': 10}, {'name': 'APPLY_IMMUNE_FALL', 'type': 'int', 'value': 50}, {'name': 'APPLY_IMMUNE_SLOW', 'type': 'int', 'value': 49}, {'name': 'APPLY_IMMUNE_STUN', 'type': 'int', 'value': 48}, {'name': 'APPLY_INT', 'type': 'int', 'value': 4}, {'name': 'APPLY_ITEM_DROP_BONUS', 'type': 'int', 'value': 45}, {'name': 'APPLY_KILL_HP_RECOVER', 'type': 'int', 'value': 47}, {'name': 'APPLY_KILL_SP_RECOVER', 'type': 'int', 'value': 42}, {'name': 'APPLY_MAGIC_ATTBONUS_PER', 'type': 'int', 'value': 85}, {'name': 'APPLY_MAGIC_ATT_GRADE', 'type': 'int', 'value': 55}, {'name': 'APPLY_MAGIC_DEF_GRADE', 'type': 'int', 'value': 56}, {'name': 'APPLY_MALL_ATTBONUS', 'type': 'int', 'value': 64}, {'name': 'APPLY_MALL_DEFBONUS', 'type': 'int', 'value': 65}, {'name': 'APPLY_MALL_EXPBONUS', 'type': 'int', 'value': 66}, {'name': 'APPLY_MALL_GOLDBONUS', 'type': 'int', 'value': 68}, {'name': 'APPLY_MALL_ITEMBONUS', 'type': 'int', 'value': 67}, {'name': 'APPLY_MANA_BURN_PCT', 'type': 'int', 'value': 25}, {'name': 'APPLY_MAX_HP', 'type': 'int', 'value': 1}, {'name': 'APPLY_MAX_HP_PCT', 'type': 'int', 'value': 69}, {'name': 'APPLY_MAX_SP', 'type': 'int', 'value': 2}, {'name': 'APPLY_MAX_SP_PCT', 'type': 'int', 'value': 70}, {'name': 'APPLY_MAX_STAMINA', 'type': 'int', 'value': 58}, {'name': 'APPLY_MELEE_MAGIC_ATTBONUS_PER', 'type': 'int', 'value': 86}, {'name': 'APPLY_MORE_THEN_HP90_DAMAGE_REDUCE', 'type': 'int', 'value': 219}, {'name': 'APPLY_MOUNT', 'type': 'int', 'value': 118}, {'name': 'APPLY_MOV_SPEED', 'type': 'int', 'value': 8}, {'name': 'APPLY_NONE', 'type': 'int', 'value': 0}, {'name': 'APPLY_NORMAL_DAMAGE_GUARD', 'type': 'int', 'value': 218}, {'name': 'APPLY_NORMAL_HIT_DAMAGE_BONUS', 'type': 'int', 'value': 72}, {'name': 'APPLY_NORMAL_HIT_DAMAGE_BONUS_BOSS_OR_MORE', 'type': 'int', 'value': 151}, {'name': 'APPLY_NORMAL_HIT_DEFEND_BONUS', 'type': 'int', 'value': 74}, {'name': 'APPLY_NORMAL_HIT_DEFEND_BONUS_BOSS_OR_MORE', 'type': 'int', 'value': 149}, {'name': 'APPLY_PC_BANG_DROP_BONUS', 'type': 'int', 'value': 77}, {'name': 'APPLY_PC_BANG_EXP_BONUS', 'type': 'int', 'value': 76}, {'name': 'APPLY_PENETRATE_PCT', 'type': 'int', 'value': 16}, {'name': 'APPLY_POISON_PCT', 'type': 'int', 'value': 12}, {'name': 'APPLY_POISON_REDUCE', 'type': 'int', 'value': 41}, {'name': 'APPLY_POTION_BONUS', 'type': 'int', 'value': 46}, {'name': 'APPLY_REFLECT_CURSE', 'type': 'int', 'value': 40}, {'name': 'APPLY_REFLECT_MELEE', 'type': 'int', 'value': 39}, {'name': 'APPLY_RESIST_ASSASSIN', 'type': 'int', 'value': 79}, {'name': 'APPLY_RESIST_BELL', 'type': 'int', 'value': 32}, {'name': 'APPLY_RESIST_BOW', 'type': 'int', 'value': 34}, {'name': 'APPLY_RESIST_CLAW', 'type': 'int', 'value': 96}, {'name': 'APPLY_RESIST_DAGGER', 'type': 'int', 'value': 31}, {'name': 'APPLY_RESIST_DARK', 'type': 'int', 'value': 89}, {'name': 'APPLY_RESIST_EARTH', 'type': 'int', 'value': 88}, {'name': 'APPLY_RESIST_ELEC', 'type': 'int', 'value': 36}, {'name': 'APPLY_RESIST_FAN', 'type': 'int', 'value': 33}, {'name': 'APPLY_RESIST_FIRE', 'type': 'int', 'value': 35}, {'name': 'APPLY_RESIST_HUMAN', 'type': 'int', 'value': 115}, {'name': 'APPLY_RESIST_ICE', 'type': 'int', 'value': 87}, {'name': 'APPLY_RESIST_MAGIC', 'type': 'int', 'value': 37}, {'name': 'APPLY_RESIST_MAGIC_REDUCTION', 'type': 'int', 'value': 98}, {'name': 'APPLY_RESIST_MOUNT_FALL', 'type': 'int', 'value': 116}, {'name': 'APPLY_RESIST_SHAMAN', 'type': 'int', 'value': 81}, {'name': 'APPLY_RESIST_SURA', 'type': 'int', 'value': 80}, {'name': 'APPLY_RESIST_SWORD', 'type': 'int', 'value': 29}, {'name': 'APPLY_RESIST_TWOHAND', 'type': 'int', 'value': 30}, {'name': 'APPLY_RESIST_WARRIOR', 'type': 'int', 'value': 78}, {'name': 'APPLY_RESIST_WIND', 'type': 'int', 'value': 38}, {'name': 'APPLY_RESIST_WOLFMAN', 'type': 'int', 'value': 95}, {'name': 'APPLY_SECOND_ATTRIBUTE_BONUS', 'type': 'int', 'value': 224}, {'name': 'APPLY_SKILL', 'type': 'int', 'value': 51}, {'name': 'APPLY_SKILL_DAMAGE_AMSEOP', 'type': 'int', 'value': 125}, {'name': 'APPLY_SKILL_DAMAGE_BIPABU', 'type': 'int', 'value': 139}, {'name': 'APPLY_SKILL_DAMAGE_BONUS', 'type': 'int', 'value': 71}, {'name': 'APPLY_SKILL_DAMAGE_BONUS_BOSS_OR_MORE', 'type': 'int', 'value': 152}, {'name': 'APPLY_SKILL_DAMAGE_BYEURAK', 'type': 'int', 'value': 143}, {'name': 'APPLY_SKILL_DAMAGE_CHAIN', 'type': 'int', 'value': 144}, {'name': 'APPLY_SKILL_DAMAGE_CHARYUN', 'type': 'int', 'value': 127}, {'name': 'APPLY_SKILL_DAMAGE_CHAYEOL', 'type': 'int', 'value': 145}, {'name': 'APPLY_SKILL_DAMAGE_GEOMPUNG', 'type': 'int', 'value': 124}, {'name': 'APPLY_SKILL_DAMAGE_GIGONGCHAM', 'type': 'int', 'value': 122}, {'name': 'APPLY_SKILL_DAMAGE_GIGUNG', 'type': 'int', 'value': 131}, {'name': 'APPLY_SKILL_DAMAGE_GONGDAB', 'type': 'int', 'value': 147}, {'name': 'APPLY_SKILL_DAMAGE_GUNGSIN', 'type': 'int', 'value': 126}, {'name': 'APPLY_SKILL_DAMAGE_GYOKSAN', 'type': 'int', 'value': 123}, {'name': 'APPLY_SKILL_DAMAGE_HWAJO', 'type': 'int', 'value': 132}, {'name': 'APPLY_SKILL_DAMAGE_HWAYEOMPOK', 'type': 'int', 'value': 137}, {'name': 'APPLY_SKILL_DAMAGE_KWANKYEOK', 'type': 'int', 'value': 130}, {'name': 'APPLY_SKILL_DAMAGE_MAHWAN', 'type': 'int', 'value': 138}, {'name': 'APPLY_SKILL_DAMAGE_MARYUNG', 'type': 'int', 'value': 136}, {'name': 'APPLY_SKILL_DAMAGE_NOEJEON', 'type': 'int', 'value': 142}, {'name': 'APPLY_SKILL_DAMAGE_PABEOB', 'type': 'int', 'value': 135}, {'name': 'APPLY_SKILL_DAMAGE_PAERYONG', 'type': 'int', 'value': 141}, {'name': 'APPLY_SKILL_DAMAGE_PALBANG', 'type': 'int', 'value': 121}, {'name': 'APPLY_SKILL_DAMAGE_PASWAE', 'type': 'int', 'value': 148}, {'name': 'APPLY_SKILL_DAMAGE_SALPOONG', 'type': 'int', 'value': 146}, {'name': 'APPLY_SKILL_DAMAGE_SAMYEON', 'type': 'int', 'value': 119}, {'name': 'APPLY_SKILL_DAMAGE_SANGONG', 'type': 'int', 'value': 128}, {'name': 'APPLY_SKILL_DAMAGE_SWAERYUNG', 'type': 'int', 'value': 133}, {'name': 'APPLY_SKILL_DAMAGE_TANHWAN', 'type': 'int', 'value': 120}, {'name': 'APPLY_SKILL_DAMAGE_YEONSA', 'type': 'int', 'value': 129}, {'name': 'APPLY_SKILL_DAMAGE_YONGBI', 'type': 'int', 'value': 140}, {'name': 'APPLY_SKILL_DAMAGE_YONGKWON', 'type': 'int', 'value': 134}, {'name': 'APPLY_SKILL_DEFEND_BONUS', 'type': 'int', 'value': 73}, {'name': 'APPLY_SKILL_DEFEND_BONUS_BOSS_OR_MORE', 'type': 'int', 'value': 150}, {'name': 'APPLY_SKILL_DURATION_INCREASE_EUNHYUNG', 'type': 'int', 'value': 182}, {'name': 'APPLY_SKILL_DURATION_INCREASE_GEOMKYUNG', 'type': 'int', 'value': 184}, {'name': 'APPLY_SKILL_DURATION_INCREASE_GYEONGGONG', 'type': 'int', 'value': 183}, {'name': 'APPLY_SKILL_DURATION_INCREASE_JEOKRANG', 'type': 'int', 'value': 185}, {'name': 'APPLY_SLOW_PCT', 'type': 'int', 'value': 14}, {'name': 'APPLY_SP_REGEN', 'type': 'int', 'value': 11}, {'name': 'APPLY_STEAL_HP', 'type': 'int', 'value': 23}, {'name': 'APPLY_STEAL_SP', 'type': 'int', 'value': 24}, {'name': 'APPLY_STR', 'type': 'int', 'value': 5}, {'name': 'APPLY_STUN_PCT', 'type': 'int', 'value': 13}, {'name': 'APPLY_THIRD_ATTRIBUTE_BONUS', 'type': 'int', 'value': 225}, {'name': 'APPLY_USE_SKILL_AMSEOP_HP_ABSORB', 'type': 'int', 'value': 187}, {'name': 'APPLY_USE_SKILL_BIPABU_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 210}, {'name': 'APPLY_USE_SKILL_BIPABU_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 234}, {'name': 'APPLY_USE_SKILL_BYEURAK_HP_ABSORB', 'type': 'int', 'value': 222}, {'name': 'APPLY_USE_SKILL_CHAIN_HP_ABSORB', 'type': 'int', 'value': 190}, {'name': 'APPLY_USE_SKILL_CHARYUN_STUN', 'type': 'int', 'value': 193}, {'name': 'APPLY_USE_SKILL_CHAYEOL_CRITICAL_PCT', 'type': 'int', 'value': 167}, {'name': 'APPLY_USE_SKILL_CHAYEOL_HP_ABSORB', 'type': 'int', 'value': 238}, {'name': 'APPLY_USE_SKILL_CHEONGRANG_CASTING_SPEED', 'type': 'int', 'value': 166}, {'name': 'APPLY_USE_SKILL_CHEONGRANG_MOV_SPEED', 'type': 'int', 'value': 165}, {'name': 'APPLY_USE_SKILL_CHUNKEON_CASTING_SPEED', 'type': 'int', 'value': 180}, {'name': 'APPLY_USE_SKILL_GEOMPUNG_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 205}, {'name': 'APPLY_USE_SKILL_GEOMPUNG_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 229}, {'name': 'APPLY_USE_SKILL_GICHEON_ATT_GRADE_BONUS', 'type': 'int', 'value': 176}, {'name': 'APPLY_USE_SKILL_GIGONGCHAM_STUN', 'type': 'int', 'value': 192}, {'name': 'APPLY_USE_SKILL_GIGUNG_ATT_GRADE_BONUS', 'type': 'int', 'value': 169}, {'name': 'APPLY_USE_SKILL_GIHYEOL_ATT_GRADE_BONUS', 'type': 'int', 'value': 179}, {'name': 'APPLY_USE_SKILL_GONGDAB_KNOCKBACK', 'type': 'int', 'value': 202}, {'name': 'APPLY_USE_SKILL_GONGDAB_STUN', 'type': 'int', 'value': 196}, {'name': 'APPLY_USE_SKILL_GUNGSIN_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 206}, {'name': 'APPLY_USE_SKILL_GUNGSIN_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 230}, {'name': 'APPLY_USE_SKILL_GWIGEOM_DEF_BONUS', 'type': 'int', 'value': 171}, {'name': 'APPLY_USE_SKILL_GYOKSAN_KNOCKBACK', 'type': 'int', 'value': 198}, {'name': 'APPLY_USE_SKILL_HOSIN_DEF_BONUS', 'type': 'int', 'value': 175}, {'name': 'APPLY_USE_SKILL_HWAYEOMPOK_KNOCKBACK', 'type': 'int', 'value': 201}, {'name': 'APPLY_USE_SKILL_JEOKRANG_DEF_BONUS', 'type': 'int', 'value': 170}, {'name': 'APPLY_USE_SKILL_JEONGEOP_ATT_GRADE_BONUS', 'type': 'int', 'value': 177}, {'name': 'APPLY_USE_SKILL_JEUNGRYEOK_DEF_BONUS', 'type': 'int', 'value': 178}, {'name': 'APPLY_USE_SKILL_KWANKYEOK_KNOCKBACK', 'type': 'int', 'value': 203}, {'name': 'APPLY_USE_SKILL_KWANKYEOK_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 207}, {'name': 'APPLY_USE_SKILL_KWANKYEOK_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 231}, {'name': 'APPLY_USE_SKILL_MAHWAN_STUN', 'type': 'int', 'value': 195}, {'name': 'APPLY_USE_SKILL_MANASHILED_CASTING_SPEED', 'type': 'int', 'value': 174}, {'name': 'APPLY_USE_SKILL_MARYUNG_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 209}, {'name': 'APPLY_USE_SKILL_MARYUNG_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 233}, {'name': 'APPLY_USE_SKILL_MUYEONG_ATT_GRADE_BONUS', 'type': 'int', 'value': 173}, {'name': 'APPLY_USE_SKILL_NOEGEOM_ATT_GRADE_BONUS', 'type': 'int', 'value': 181}, {'name': 'APPLY_USE_SKILL_NOEJEON_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 211}, {'name': 'APPLY_USE_SKILL_NOEJEON_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 235}, {'name': 'APPLY_USE_SKILL_PABEOB_STUN', 'type': 'int', 'value': 194}, {'name': 'APPLY_USE_SKILL_PAERYONG_HP_ABSORB', 'type': 'int', 'value': 221}, {'name': 'APPLY_USE_SKILL_PALBANG_HP_ABSORB', 'type': 'int', 'value': 186}, {'name': 'APPLY_USE_SKILL_PASWAE_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 213}, {'name': 'APPLY_USE_SKILL_PASWAE_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 237}, {'name': 'APPLY_USE_SKILL_PASWAE_SP_ABSORB', 'type': 'int', 'value': 191}, {'name': 'APPLY_USE_SKILL_SALPOONG_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 212}, {'name': 'APPLY_USE_SKILL_SALPOONG_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 236}, {'name': 'APPLY_USE_SKILL_SAMYEON_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 204}, {'name': 'APPLY_USE_SKILL_SAMYEON_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 228}, {'name': 'APPLY_USE_SKILL_SAMYEON_STUN', 'type': 'int', 'value': 197}, {'name': 'APPLY_USE_SKILL_SANGONG_ATT_GRADE_BONUS', 'type': 'int', 'value': 168}, {'name': 'APPLY_USE_SKILL_SEOMJEON_KNOCKBACK', 'type': 'int', 'value': 199}, {'name': 'APPLY_USE_SKILL_SWAERYUNG_KNOCKBACK', 'type': 'int', 'value': 200}, {'name': 'APPLY_USE_SKILL_TERROR_ATT_GRADE_BONUS', 'type': 'int', 'value': 172}, {'name': 'APPLY_USE_SKILL_TUSOK_HP_ABSORB', 'type': 'int', 'value': 220}, {'name': 'APPLY_USE_SKILL_YEONSA_HP_ABSORB', 'type': 'int', 'value': 188}, {'name': 'APPLY_USE_SKILL_YONGBI_HP_ABSORB', 'type': 'int', 'value': 189}, {'name': 'APPLY_USE_SKILL_YONGKWON_NEXT_COOLTIME_DECREASE_10PER', 'type': 'int', 'value': 208}, {'name': 'APPLY_USE_SKILL_YONGKWON_NEXT_COOLTIME_DECREASE_20PER', 'type': 'int', 'value': 232},
Above of 118 they are the new 6/7 bonuses.
- 1
- 2
-
Good idea, nice code, thanks.
I did extend a bit.Spoiler- 4
-
-
-
I think that file is a mistake only. Have a look at the attaching code:
Spoilerchar *__thiscall CInstanceBase::SetAura(char *this, int a2) { char *result; // eax@1 int v3; // ST1C_4@20 float v4; // ST18_4@20 int v5; // eax@20 char *v6; // [sp+10h] [bp-2Ch]@1 int v7; // [sp+18h] [bp-24h]@11 char v8; // [sp+24h] [bp-18h]@20 int v9; // [sp+30h] [bp-Ch]@17 int v10; // [sp+34h] [bp-8h]@12 char *v11; // [sp+38h] [bp-4h]@7 v6 = this; result = (char *)CInstanceBase::IsPoly(this); if ( !result ) { result = (char *)CInstanceBase::__IsShapeAnimalWear(v6); if ( !(_BYTE)result ) { CActorInstance::ChangePart((_DWORD *)v6 + 136, 7, a2); if ( a2 ) { if ( CItemManager::GetItemDataPointer(a2, &v11) ) { v7 = CInstanceBase::GetRace((int)v6); if ( v7 >= 8 ) { if ( v7 == 8 ) v10 = 4; else v10 = -1; } else { v10 = v7 % 4; } switch ( CInstanceBase::GetRace((int)v6) ) { case 0: case 2: case 5: case 7: case 8: v9 = 1; break; case 1: case 3: case 4: case 6: v9 = 0; break; default: v9 = 0; break; } v3 = CItemData::GetItemPosition(v11, (int)&v8, v10, v9); v4 = CItemData::GetItemScale(v11, v10, v9); v5 = CItemData::GetAuraEffectID((int)v11); *((_DWORD *)v6 + 122) = CActorInstance::AttachEffectByID( v6 + 544, 0, (int)"Bip01 Spine2", v5, 0, 0, 0, v4, v3); result = v6; *((_DWORD *)v6 + 20) = a2; } else { if ( *((_DWORD *)v6 + 122) ) { CInstanceBase::__DetachEffect(*((_DWORD *)v6 + 122)); *((_DWORD *)v6 + 122) = 0; } result = v6; *((_DWORD *)v6 + 20) = 0; } } else { if ( *((_DWORD *)v6 + 122) ) { CInstanceBase::__DetachEffect(*((_DWORD *)v6 + 122)); *((_DWORD *)v6 + 122) = 0; } result = v6; *((_DWORD *)v6 + 20) = 0; } } } return result; }
- 1
- 6
-
Karma is the biggest b**ch in life .
- 6
Check if are Activated All Slots by Page in Dragon Soul
in Programming & Scripts
Posted
Ahh I see now.