Jump to content

Abel(Tiger)

Active+ Member
  • Posts

    196
  • Joined

  • Last visited

  • Days Won

    14
  • Feedback

    0%

Everything posted by Abel(Tiger)

  1. ACMD(do_notice) { BroadcastNotice(argument + 1); } Be careful though, that +1 should not be done without a size check.
  2. The name of that sword (name from item_proto.txt) might start with a number. The method that loads the mob_drop_item.txt search first for the item name not vnum. Example: 50028 24k 금반지 ITEM_SPECIAL If I try to add an item with vnum 24 to mob_drop_item.txt I will drop item with vnum 50028 Easy fix for this is to add it like 0024 Also check the file ori_to_new_table.txt.
  3. Yeah, I see what you talking about. The Dead method is called so fast now and it removes the stun flag so the check for the skill is not working anymore. Try this: // char_skill.cpp // Replace: if (!pkChrVictim->Damage(m_pkChr, iDam, dt) && !pkChrVictim->IsStun()) // With: if (!pkChrVictim->Damage(m_pkChr, iDam, dt) && !pkChrVictim->IsStun() && !pkChrVictim->IsDead())
  4. I don't see you having some exp bonus so there are three posibilities (or maybe more) : 1. You have a premium exp (those columns from account table) 2. You have double exp directly from the source (I saw some people doing that) 3. You have priv but the messages are not shown somehow
  5. Use /state on the character you get double exp and post a screenshot of the output.
  6. They (ymir) used Stun because it does more stuff beside locking the character. Also they checked some stuff with the IsStun so I recommend you keep using it. Try this and tell me if it's ok: // char.h // Replace: void Stun(); // With: void Stun(bool bJustDie = false); // char_battle.cpp // Replace: void CHARACTER::Stun() { ... } // With: void CHARACTER::Stun(bool bJustDie) { if (IsStun()) return; if (IsDead()) return; if (!IsPC() && m_pkParty) { m_pkParty->SendMessage(this, PM_ATTACKED_BY, 0, 0); } sys_log(1, "%s: Stun %p", GetName(), this); PointChange(POINT_HP_RECOVERY, -GetPoint(POINT_HP_RECOVERY)); PointChange(POINT_SP_RECOVERY, -GetPoint(POINT_SP_RECOVERY)); CloseMyShop(); event_cancel(&m_pkRecoveryEvent); // 회복 이벤트를 죽인다. if(bJustDie) { SET_BIT(m_pointsInstant.instant_flag, INSTANT_FLAG_STUN); Dead(); } else { TPacketGCStun pack; pack.header = HEADER_GC_STUN; pack.vid = m_vid; PacketAround(&pack, sizeof(pack)); SET_BIT(m_pointsInstant.instant_flag, INSTANT_FLAG_STUN); if (m_pkStunEvent) return; char_event_info* info = AllocEventInfo<char_event_info>(); info->ch = this; m_pkStunEvent = event_create(StunEvent, info, PASSES_PER_SEC(3)); } } // Inside: bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // Replace: if (GetHP() <= 0) { Stun(); if (pAttacker && !pAttacker->IsNPC()) m_dwKillerPID = pAttacker->GetPlayerID(); else m_dwKillerPID = 0; } // With: if (GetHP() <= 0) { if (pAttacker && !pAttacker->IsNPC()) m_dwKillerPID = pAttacker->GetPlayerID(); else m_dwKillerPID = 0; Stun(true); }
  7. The tutorial is very old New tutorial: // PythonApplicationProcedure.cpp // After: if (m_isWindowFullScreenEnable) { __MinimizeFullScreenWindow(hWnd, m_dwWidth, m_dwHeight); } // Just add: OnMouseMiddleButtonUp(0, 0); That's all!
  8. Check GameLib/ActorInstanceMotion.cpp function : void CActorInstance::__MotionEventProcess(BOOL isPC) On else it shoud not be a loop.
  9. // SoundManager.cpp // Search: void CSoundManager::StopAllSound3D() { for (int i = 0; i < CSoundManager3D::INSTANCE_MAX_COUNT; ++i) { StopSound3D(i); } } // Replace with: void CSoundManager::StopAllSound3D() { for (int i = 0; i < CSoundManager3D::INSTANCE_MAX_COUNT; ++i) { StopSound3D(i); } m_PlaySoundHistoryMap.clear(); } // Search: ms_SoundManager2D.Destroy(); // Add after: m_PlaySoundHistoryMap.clear();
  10. No need for { }. Case actually tell the program where to start code execution and is executed until the end of the switch or break; If you make a new case and place all the code you want inside { } and in the end you don't write break, the code will be executed after { } even if it is another case.
  11. // uiQuest.py def AppendQuestion(self, name, idx): if not self.btnAnswer: return # This if: if name.find("#SC#") != -1: name = name.replace("#SC#", ";") In your quest just use #SC#. Hardcoded but is just a if ...
  12. When you use "version 2.0" in .sub the image must be in the same folder like the sub . When you use "version 1.0" in .sub the image must be in d:/ymir work/ui .
  13. Nice ideea. If I have time I will do it and send to you.
×
×
  • 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.