Jump to content

Speachless

Premium
  • Posts

    683
  • Joined

  • Last visited

  • Days Won

    8
  • Feedback

    0%

Everything posted by Speachless

  1. The map looks very good. If you make more light and a lighter terrain like in Terra i will definitely buy the map.
  2. Hi plechi. you've done a great map. i sugest you more light, and a terrain like
  3. No need to disable all, just the function which check it. After, i have never had any problems with the server, and I did this one year ago.
  4. I'm the one who done that. It has created more problems than good things.
  5. Is this necessary? there are so many changes in packets and new systems, so no one can enter in with their launcher.
  6. Violet Evergarden Also on netflix Trailer:
  7. Rename upper case letters in lowercase letters from all map files.
  8. void CNewPetActor::Unsummon() { if (true == this->IsSummoned()) { std::auto_ptr<SQLMsg> pmsg2(DBManager::instance().DirectQuery("UPDATE new_petsystem SET level = %d, evolution=%d, exp=%d, expi=%d, bonus0=%d, bonus1=%d, bonus2=%d, skill0=%d, skill0lv= %d, skill1=%d, skill1lv= %d, skill2=%d, skill2lv= %d, duration=%d, tduration=%d WHERE id = %lu ", this->GetLevel(), this->m_dwevolution, this->GetExp(), this->GetExpI(), this->m_dwbonuspet[0][1], this->m_dwbonuspet[1][1], this->m_dwbonuspet[2][1], this->m_dwskillslot[0], this->m_dwskill[0], this->m_dwskillslot[1], this->m_dwskill[1], this->m_dwskillslot[2], this->m_dwskill[2], this->m_dwduration, this->m_dwtduration, ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetID())); this->ClearBuff(); LPITEM pSummonItem = ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID()); if (pSummonItem != NULL) { for (int b = 0; b < 3; b++) { pSummonItem->SetForceAttribute(b, 1, m_dwbonuspet[b][1]); } pSummonItem->SetForceAttribute(3, 1, m_dwduration); pSummonItem->SetForceAttribute(4, 1, m_dwtduration); pSummonItem->SetSocket(1,m_dwlevel); pSummonItem->SetSocket(0, false); pSummonItem->Lock(false); } this->SetSummonItem(NULL); if (NULL != m_pkOwner) m_pkOwner->ComputePoints(); if (NULL != m_pkChar) M2_DESTROY_CHARACTER(m_pkChar); m_pkChar = 0; m_dwVID = 0; m_dwlevel = 1; m_dwlevelstep = 0; m_dwExpFromMob = 0; m_dwExpFromItem = 0; m_dwexp = 0; m_dwexpitem = 0; m_dwTimePet = 0; m_dwImmTime = 0; m_dwslotimm = 0; for (int s = 0; s < 9; ++s) { m_dwpetslotitem[s] = -1; } ClearBuff(); m_pkOwner->ChatPacket(CHAT_TYPE_COMMAND, "PetUnsummon"); } }
  9. Thank you Abel. But the same way is written in the normal pet system. So i don't think it's from there.
  10. I have a strange crash. I've been using the pet-level system ever since it came out so it's an old system, and never had problems until now. #0 CNewPetActor::Unsummon (this=0x611ce1c0) at item.h:44 pSummonItem = <value optimized out> #1 0x08294658 in CNewPetActor::Update (this=0x611ce1c0, deltaTime=0) at New_PetSystem.cpp:783 No locals. #2 0x08291451 in CNewPetSystem::Update (this=0x5daef5c0, deltaTime=0) at New_PetSystem.cpp:1051 petActor = (CNewPetActor *) 0x611ce1c0 bResult = true currentTime = 436200661 v_garbageActor = {<std::_Vector_base<CNewPetActor*,std::allocator<CNewPe tActor*> >> = { _M_impl = {<std::allocator<CNewPetActor*>> = {<__gnu_cxx::new_allocator<CNew PetActor*>> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>} #3 0x08291529 in newpetsystem_update_event (event=@0xffffa2ec, processing_time=6) at New_PetSystem.cpp:41 pPetSystem = <value optimized out> __FUNCTION__ = "newpetsystem_update_event" #4 0x08149bb1 in event_process (pulse=10924285) at event.cpp:140 pElem = <value optimized out> the_event = {px = 0x5f798ac0} processing_time = 6 bool CNewPetSystem::Update(DWORD deltaTime) { bool bResult = true; DWORD currentTime = get_dword_time(); if (m_dwUpdatePeriod > currentTime - m_dwLastUpdateTime) return true; std::vector <CNewPetActor*> v_garbageActor; for (TNewPetActorMap::iterator iter = m_petActorMap.begin(); iter != m_petActorMap.end(); ++iter) { CNewPetActor* petActor = iter->second; if (0 != petActor && petActor->IsSummoned()) { LPCHARACTER pPet = petActor->GetCharacter(); if (NULL == CHARACTER_MANAGER::instance().Find(pPet->GetVID())) { v_garbageActor.push_back(petActor); } else { bResult = bResult && petActor->Update(deltaTime); } } } for (std::vector<CNewPetActor*>::iterator it = v_garbageActor.begin(); it != v_garbageActor.end(); it++) DeletePet(*it); m_dwLastUpdateTime = currentTime; return bResult; }
  11. I don't think it was a mistake. Always something happens
  12. #define IS_FIX_POISON_RISIPA_AFFECT(type) ((type) == AFFECT_MOV_SPEED || (type) == AFFECT_ATT_SPEED || (type) == AFFECT_STR || (type) == AFFECT_DEX || (type) == AFFECT_INT || (type) == AFFECT_CON || (type) == AFFECT_CHINA_FIREWORK || (type) == SKILL_JEONGWI || (type) == SKILL_GEOMKYUNG || (type) == SKILL_CHUNKEON || (type) == SKILL_EUNHYUNG || (type) == SKILL_GYEONGGONG || (type) == SKILL_GWIGEOM || (type) == SKILL_TERROR || (type) == SKILL_JUMAGAP || (type) == SKILL_MANASHILED || (type) == SKILL_HOSIN || (type) == SKILL_REFLECT || (type) == SKILL_KWAESOK || (type) == SKILL_JEUNGRYEOK || (type) == SKILL_GICHEON || (type) == SKILL_JEOKRANG || (type) == SKILL_CHEONGRANG) void CHARACTER::ClearAffect_New(bool bSave) { TAffectFlag afOld = m_afAffectFlag; WORD wMovSpd = GetPoint(POINT_MOV_SPEED); WORD wAttSpd = GetPoint(POINT_ATT_SPEED); itertype(m_list_pkAffect) it = m_list_pkAffect.begin(); while (it != m_list_pkAffect.end()) { CAffect * pkAff = *it; if (bSave) { if (!IS_FIX_POISON_RISIPA_AFFECT(pkAff->dwType)) { ++it; continue; } if (IsPC()) { SendAffectRemovePacket(GetDesc(), GetPlayerID(), pkAff->dwType, pkAff->bApplyOn); } } ComputeAffect(pkAff, false); it = m_list_pkAffect.erase(it); CAffect::Release(pkAff); } if (afOld != m_afAffectFlag || wMovSpd != GetPoint(POINT_MOV_SPEED) || wAttSpd != GetPoint(POINT_ATT_SPEED)) UpdatePacket(); CheckMaximumPoints(); if (m_list_pkAffect.empty()) event_cancel(&m_pkAffectEvent); } That's how i solved a long time ago. Everyone is free to use what he wants. In chat skill at sura skill you use if (IS_SET(m_pkSk->dwFlag, SKILL_FLAG_REMOVE_GOOD_AFFECT)) { ..... if (number(1, 100) <= iAmount2) { pkChrVictim->ClearAffect_New(true); pkChrVictim->AddAffect(m_pkSk->dwVnum, POINT_NONE, 0, AFF_PABEOP, iDur2, 0, true); } }
  13. Or you can create a new ClearAffect with new definitions of which affect it should clear on target.
  14. Example if (m_dwRace >= 0 && m_dwRace <= 8) m_GraphicThingInstance.SetScaleNew(2, 2, 2);
  15. In char_item.cpp you have case ITEM_SPECIAL_DS: if (!item->IsEquipped()) EquipItem(item); else UnequipItem(item); break;
  16. In game.py def __toggleSwitchbot(self): if self.switchbot.bot_shown == 1: self.switchbot.Hide() else: self.switchbot.Show()
  17. Create a timer that's working just with an event flag and that timer opens the def from python. This way all players will see it in real time.Don't worry about loop timer, it won't create any load in server. Good luck. cmdchat("_test_start") ( quest command ) _test_start you put in game.py at def __ServerCommand_Build(self): Example: def __ServerCommand_Build(self): serverCommandList={ "_test_start" : self.TestSystem, } and after you create the def at the end of the file and you are done.
  18. static bool IsExceptions(int vnum) { switch (vnum) { case 30036: return true; } return false; } if (!IsExceptions(GetVnum())) { LPITEM item; return (GetType() == ITEM_MATERIAL); }
  19. if (!IsExceptions(item->GetVnum())) { LPITEM item; return (GetType() == ITEM_MATERIAL); }
  20. The timer it's the best solution for this or use a Ch swhitcher that is just python part Works better than a source version. Also you can optimize your querys.
  21. What the hell is in your mind man? Even if you wanted to be accessible from a player account, at least it should have an argument (which acts as a password at least). You come with the most neglected solutions. I don't recommend a solution based on a command.
×
×
  • 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.