Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/26/16 in all areas

  1. I want share you critical effect: UserInterface/InstanceBaseEffect.cpp open and search: else if (flag & DAMAGE_CRITICAL) { //rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot); //return; 숫자도 표시. } Thus replaced: else if (flag & DAMAGE_CRITICAL) { rkEftMgr.CreateEffect(ms_adwCRCAffectEffect[EFFECT_DAMAGE_CRITICAL],v3Pos,v3Rot); //return; 숫자도 표시. } root/playersettingmodule.py open and search: #chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_CRITICAL, "", "d:/ymir work/effect/affect/damagevalue/critical.mse") Thus replaced: chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_CRITICAL, "", "d:/ymir work/effect/affect/damagevalue/critical.mse") Effect: [Hidden Content] [Hidden Content]
    1 point
  2. Hi there devs, I've found a very big problem with dungeons and party about half a year before. This fix is already public on our (the Hungarian) forum, but now I'd like to share it here too. The problem & The story I was a developer on a real server (server with players) and we made a new dungeon. (There was no dungeon before.) During the test there was no problem, so we put in the dungeon to the live server. After some hours, the game99 have crashed. In the first days, I had no idea what could cause the problem. I rewrote the quest about 2 times 2 different ways, and the problem was still up. I've tired to debug the core, but I couldn't find anything, so I started to search on the forums, and I've found this: LINK So the main problem: Go to ch99, create a group with 3 member, then start a dungeon. After the warp, go back to character select (exit from dungeon) and kick one member. Then invite him/her again. When the target accepts the invitation, the core will crash. [Hidden Content] The fix Its a really really short and interesting fix, because its already in the sources, but its commented (both in mainline and novaline) -.- (for unknown reason, because it doesn't cause any further problem). char.cpp, in void CHARACTER::SetParty(LPPARTY pkParty): Replace this: //if (m_pkDungeon && IsPC()) //SetDungeon(NULL); To this: if (m_pkDungeon && IsPC() && !pkParty) SetDungeon(NULL);
    1 point
  3. + Open shop.cpp + Search for CShop::Buy(LPCHARACTER ch, BYTE pos) + After: if (pos >= m_itemVector.size()) { sys_log(0, "Shop::Buy : invalid position %d : %s", pos, ch->GetName()); return SHOP_SUBHEADER_GC_INVALID_POS; } put: if (IsPCShop() && ch->GetGMLevel() > GM_PLAYER) return SHOP_SUBHEADER_GC_SOLD_OUT; I haven't tested it but should work.
    1 point
  4. thanks vegas. (bu amk egolusu da vectors gibi her koda vegas yazıyor)
    1 point
  5. Not completely your tutorial, here i give you full parts xD 1. Search in char.cpp: cannot_dead = false; 2. Add below: costume_visible = true; 1. Search: WORD CHARACTER::GetPart(BYTE bPartPos) const { assert(bPartPos < PART_MAX_NUM); return m_pointsInstant.parts[bPartPos]; } 2. Change with: WORD CHARACTER::GetPart(BYTE bPartPos) const { assert(bPartPos < PART_MAX_NUM); if(bPartPos == PART_MAIN && GetWear(WEAR_COSTUME_BODY) && CostumeVisible() == false) if(const LPITEM pArmor = GetWear(WEAR_BODY)) return pArmor->GetVnum(); return m_pointsInstant.parts[bPartPos]; } 1. Search: WORD CHARACTER::GetOriginalPart(BYTE bPartPos) const { switch (bPartPos) { case PART_MAIN: if (!IsPC()) return GetPart(PART_MAIN); else return m_pointsInstant.bBasePart; case PART_HAIR: return GetPart(PART_HAIR); case PART_ACCE: return GetPart(PART_ACCE); default: return 0; } } 2. Change with: WORD CHARACTER::GetOriginalPart(BYTE bPartPos) const { switch(bPartPos) { case PART_MAIN: if(GetWear(WEAR_COSTUME_BODY) && CostumeVisible() == false) if(const LPITEM pArmor = GetWear(WEAR_BODY)) return pArmor->GetVnum(); if(!IsPC()) return GetPart(PART_MAIN); else return m_pointsInstant.bBasePart; case PART_HAIR: return GetPart(PART_HAIR); #ifdef __ENABLE_ACCE_ case PART_ACCE: return GetPart(PART_ACCE); #endif default: return 0; } } 1. Search in char.h: void SetLastSyncTime(const timeval &tv) { memcpy(&m_tvLastSyncTime, &tv, sizeof(timeval)); } const timeval& GetLastSyncTime() { return m_tvLastSyncTime; } void SetSyncHackCount(int iCount) { m_iSyncHackCount = iCount;} int GetSyncHackCount() { return m_iSyncHackCount; } 2. Add below: public: bool CostumeVisible() const { return costume_visible; }; void SetCostumeVisible(bool visible) { costume_visible = visible; }; private: bool costume_visible; 1. Search in item.cpp: case ITEM_ARMOR: { if (0 != m_pOwner->GetWear(WEAR_COSTUME_BODY)) break; if (GetSubType() == ARMOR_BODY || GetSubType() == ARMOR_HEAD || GetSubType() == ARMOR_FOOTS || GetSubType() == ARMOR_SHIELD) { if (bAdd) { if (GetProto()->bSubType == ARMOR_BODY) m_pOwner->SetPart(PART_MAIN, GetVnum()); } else { if (GetProto()->bSubType == ARMOR_BODY) m_pOwner->SetPart(PART_MAIN, m_pOwner->GetOriginalPart(PART_MAIN)); } } } break; 2. Delete function and change with this: case ITEM_ARMOR: { if(m_pOwner->GetWear(WEAR_COSTUME_BODY) && m_pOwner->CostumeVisible() == true) break; if(GetSubType() == ARMOR_BODY || GetSubType() == ARMOR_HEAD || GetSubType() == ARMOR_FOOTS || GetSubType() == ARMOR_SHIELD) { if(bAdd) { if(GetProto()->bSubType == ARMOR_BODY) m_pOwner->SetPart(PART_MAIN, GetVnum()); } else { if(GetProto()->bSubType == ARMOR_BODY) m_pOwner->SetPart(PART_MAIN, m_pOwner->GetOriginalPart(PART_MAIN)); } } } break; 1. Search: case ITEM_COSTUME: { DWORD toSetValue = this->GetVnum(); EParts toSetPart = PART_MAX_NUM; if (GetSubType() == COSTUME_BODY) { toSetPart = PART_MAIN; if (false == bAdd) { const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY); toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN); } } 2. Change with: case ITEM_COSTUME: { DWORD toSetValue = this->GetVnum(); EParts toSetPart = PART_MAX_NUM; if(GetSubType() == COSTUME_BODY) { toSetPart = PART_MAIN; if(false == bAdd || (m_pOwner->GetWear(WEAR_BODY) && m_pOwner->CostumeVisible() == false)) { const CItem* pArmor = m_pOwner->GetWear(WEAR_BODY); toSetValue = (NULL != pArmor) ? pArmor->GetVnum() : m_pOwner->GetOriginalPart(PART_MAIN); } } Good quest: quest costume begin state start begin when login begin cmdchat("costume "..q.getcurrentquestindex()) end when button or info begin if pc.getqf("costume") == 1 then chat("You chose visibility costume.") pc.setqf("costume", 2) pc.costume(0) elseif pc.getqf("costume") == 2 then chat("You chose visibility armor.") pc.setqf("costume", 1) pc.costume(1) end end end end quest login_costume_use begin state start begin when login with pc.getqf("block_quest") == 0 begin pc.setqf("block_quest", 1) pc.setf("costume", "costume", 1) end end end
    1 point
  6. And you want a precompiled dump_proto ? with those? lel People come here to ask for help .. nobody works for you. As I said, to make compatible do as I said. Modify the structure mob_proto for each ehchant and resist as in mob_proto client and dump_proto. I've helped you with the answer, but you have to do and a little effort and learn to compile alone dump_proto. If you do not try, you do not ever learn, and again you will come here for help. Belive me isn't so hard to compile dump_proto it take 10 seconds. Client side : Change mob_proto struct: [Hidden Content] Change dumo_proto struct: [Hidden Content] Server side : mob_proto struct :[Hidden Content] After MOB_ENCHANT_PENETRATE add: MOB_ENCHANT_BLEEDING etc... After MOB_RESIST_POISON add : MOB_RESIST_CLAW and MOB_RESIST_BLEEDING You need to look intro you mob_proto and add those in structs
    1 point
  7. It needs compiling... But thanks for your replay.
    1 point
  8. Client side : Change mob_proto struct: [Hidden Content] Change dumo_proto struct: [Hidden Content] Server side : mob_proto struct :[Hidden Content] It was hard?
    1 point
  9. I can't download files. You need to change client mob_proto structure and also dump_proto structure. Also i can't download files.
    1 point
  10. Thanks but that's not the problem. Still waiting for an smart reply.
    1 point
  11. As you can see in the video it crashed the core, and not the client binary. But I already debuged the core, and the problem was there. Its definitely game core problem not client binary problem. Because when you invite somebody to the party, it sets the "dungeon" to the new member. And if we don't set the dungeon to "null" when we destroy the dungeon, it will point to an incorrect memory adress, and when we try to use this incorrect adress, it will lead to core crash,
    1 point
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.