void CHARACTER::DragonSoul_DeactivateAll() { for (int i = DRAGON_SOUL_EQUIP_SLOT_START; i < DRAGON_SOUL_EQUIP_SLOT_END; i++) { DSManager::instance().DeactivateDragonSoul(GetInventoryItem(i), true); } m_pointsInstant.iDragonSoulActiveDeck = -1; RemoveAffect(AFFECT_DRAGON_SOUL_DECK_0); RemoveAffect(AFFECT_DRAGON_SOUL_DECK_1); }
void CHARACTER::RemoveBadAffect() { sys_log(0, "RemoveBadAffect %s", GetName()); // 독 RemovePoison(); RemoveFire(); // 스턴 : Value%로 상대방을 5초간 머리 위에 별이 돌아간다. (때리면 1/2 확률로 풀림) AFF_STUN RemoveAffect(AFFECT_STUN); // 슬로우 : Value%로 상대방의 공속/이속 모두 느려진다. 수련도에 따라 달라짐 기술로 사용 한 경우에 AFF_SLOW RemoveAffect(AFFECT_SLOW); // 투속마령 RemoveAffect(SKILL_TUSOK); // 저주 //RemoveAffect(SKILL_CURSE); // 파법술 //RemoveAffect(SKILL_PABUP); // 기절 : Value%로 상대방을 기절시킨다. 2초 AFF_FAINT //RemoveAffect(AFFECT_FAINT); // 다리묶임 : Value%로 상대방의 이동속도를 떨어트린다. 5초간 -40 AFF_WEB //RemoveAffect(AFFECT_WEB); // 잠들기 : Value%로 상대방을 10초간 잠재운다. (때리면 풀림) AFF_SLEEP //RemoveAffect(AFFECT_SLEEP); // 저주 : Value%로 상대방의 공등/방등 모두 떨어트린다. 수련도에 따라 달라짐 기술로 사용 한 경우에 AFF_CURSE //RemoveAffect(AFFECT_CURSE); // 마비 : Value%로 상대방을 4초간 마비시킨다. AFF_PARA //RemoveAffect(AFFECT_PARALYZE); // 부동박부 : 무당 기술 //RemoveAffect(SKILL_BUDONG); }
bool CHARACTER::RemoveAffect(DWORD dwType) { // CHAT_BLOCK if (dwType == AFFECT_BLOCK_CHAT) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("채팅 금지가 풀렸습니다.")); } // END_OF_CHAT_BLOCK bool flag = false; CAffect * pkAff; while ((pkAff = FindAffect(dwType))) { RemoveAffect(pkAff); flag = true; } return flag; }
void CHARACTER::RemoveGoodAffect() { RemoveAffect(AFFECT_MOV_SPEED); RemoveAffect(AFFECT_ATT_SPEED); RemoveAffect(AFFECT_STR); RemoveAffect(AFFECT_DEX); RemoveAffect(AFFECT_INT); RemoveAffect(AFFECT_CON); RemoveAffect(AFFECT_CHINA_FIREWORK); RemoveAffect(SKILL_JEONGWI); RemoveAffect(SKILL_GEOMKYUNG); RemoveAffect(SKILL_CHUNKEON); RemoveAffect(SKILL_EUNHYUNG); RemoveAffect(SKILL_GYEONGGONG); RemoveAffect(SKILL_GWIGEOM); RemoveAffect(SKILL_TERROR); RemoveAffect(SKILL_JUMAGAP); RemoveAffect(SKILL_MANASHILED); RemoveAffect(SKILL_HOSIN); RemoveAffect(SKILL_REFLECT); RemoveAffect(SKILL_KWAESOK); RemoveAffect(SKILL_JEUNGRYEOK); RemoveAffect(SKILL_GICHEON); }
int CHARACTER::ProcessAffect() { bool bDiff = false; CAffect *pkAff = NULL; // // 프리미엄 처리 // for (int i = 0; i <= PREMIUM_MAX_NUM; ++i) { int aff_idx = i + AFFECT_PREMIUM_START; pkAff = FindAffect(aff_idx); if (!pkAff) continue; int remain = GetPremiumRemainSeconds(i); if (remain < 0) { RemoveAffect(aff_idx); bDiff = true; } else pkAff->lDuration = remain + 1; } ////////// HAIR_AFFECT pkAff = FindAffect(AFFECT_HAIR); if (pkAff) { // IF HAIR_LIMIT_TIME() < CURRENT_TIME() if ( this->GetQuestFlag("hair.limit_time") < get_global_time()) { // SET HAIR NORMAL this->SetPart(PART_HAIR, 0); // REMOVE HAIR AFFECT RemoveAffect(AFFECT_HAIR); } else { // INCREASE AFFECT DURATION ++(pkAff->lDuration); } } ////////// HAIR_AFFECT // CHorseNameManager::instance().Validate(this); TAffectFlag afOld = m_afAffectFlag; long lMovSpd = GetPoint(POINT_MOV_SPEED); long lAttSpd = GetPoint(POINT_ATT_SPEED); itertype(m_list_pkAffect) it; it = m_list_pkAffect.begin(); while (it != m_list_pkAffect.end()) { pkAff = *it; bool bEnd = false; if (pkAff->dwType >= GUILD_SKILL_START && pkAff->dwType <= GUILD_SKILL_END) { if (!GetGuild() || !GetGuild()->UnderAnyWar()) bEnd = true; } if (pkAff->lSPCost > 0) { if (GetSP() < pkAff->lSPCost) bEnd = true; else PointChange(POINT_SP, -pkAff->lSPCost); } // AFFECT_DURATION_BUG_FIX // 무한 효과 아이템도 시간을 줄인다. // 시간을 매우 크게 잡기 때문에 상관 없을 것이라 생각됨. if ( --pkAff->lDuration <= 0 ) { bEnd = true; } // END_AFFECT_DURATION_BUG_FIX if (bEnd) { it = m_list_pkAffect.erase(it); ComputeAffect(pkAff, false); bDiff = true; if (IsPC()) { SendAffectRemovePacket(GetDesc(), GetPlayerID(), pkAff->dwType, pkAff->bApplyOn); } CAffect::Release(pkAff); continue; } ++it; } if (bDiff) { if (afOld != m_afAffectFlag || lMovSpd != GetPoint(POINT_MOV_SPEED) || lAttSpd != GetPoint(POINT_ATT_SPEED)) { UpdatePacket(); } CheckMaximumPoints(); } if (m_list_pkAffect.empty()) return true; return false; }