void CCrywolfAltar::SetAltarValidContract(int iAltarObjIndex, int iClass) { int iAltarNumber = this->GetAlatarNumber(iClass); CCrywolfAltarInfo * AltarInfo = &this->m_AltarInfo[iAltarNumber]; if ( AltarInfo->GetAltarState() != 2 ) { return; } if ( AltarInfo->m_dwValidContractTime < GetTickCount() ) { MsgOutput(AltarInfo->m_iUserIndex, lMsg.Get(MSGGET(12, 251)), iAltarNumber); UTIL.SendCrywolfUserAnyMsg(2, lMsg.Get(MSGGET(12, 252)), gObj[AltarInfo->m_iUserIndex].Name, iAltarNumber); LogAddTD("[ Crywolf ][Altar Op.] [%s][%s] Set Valid Contract Altar[%d]", gObj[AltarInfo->m_iUserIndex].AccountID, gObj[AltarInfo->m_iUserIndex].Name, iAltarNumber); AltarInfo->SetAltarState(1); gObjAddBuffEffect(&gObj[iAltarObjIndex], AT_CW_ALTAR_STATUS, 0, 0, 0, 0, -10); } }
BOOL NpcLitleSanta(LPOBJ lpNpc,LPOBJ lpObj,int Buff) { if( !gObjIsConnected(lpObj->m_Index) ) { return true; } switch( Buff ) { case 0: lpObj->Life = lpObj->MaxLife + lpObj->AddLife; GCReFillSend(lpObj->m_Index,(WORD)lpObj->Life,0xFF,0,lpObj->iShield); break; case 1: lpObj->Mana = lpObj->MaxMana + lpObj->MaxMana; GCManaSend(lpObj->m_Index,(WORD)lpObj->Mana,0xFF,0,lpObj->BP); break; case 0x5E: gObjAddBuffEffect(lpObj,BUFF_SANTA_STRENGHTHENER,ADD_OPTION_SANTABUFF,30,0,0,1800); break; case 0x5F: gObjAddBuffEffect(lpObj,BUFF_SANTA_DEFENSE,ADD_OPTION_SANTADEFENSE,100,0,0,1800); break; case 0x5C: gObjAddBuffEffect(lpObj,BUFF_SANTA_HEALING,ADD_OPTION_LIFE,500,0,0,1800); break; case 0x5D: gObjAddBuffEffect(lpObj,BUFF_SANTA_PROTECTION,ADD_OPTION_MANA,500,0,0,1800); break; case 0x60: gObjAddBuffEffect(lpObj,BUFF_SANTA_QUICKNESS,ADD_OPTION_ATTACK_SPEED,15,0,0,1800); break; case 0x61: gObjAddBuffEffect(lpObj,BUFF_SANTA_FORTUNE,ADD_OPTION_SANTABPRECOVERY,10,0,0,1800); break; } return true; }
BOOL CObjBaseAttack::ResistanceCheck(LPOBJ lpObj, LPOBJ lpTargetObj, int skill) { //missing objects? maybe from _CS side or deleted in 1.01.00 if( lpTargetObj->Type != OBJ_USER) { if(lpTargetObj->Class == 277 || lpTargetObj->Class == 283 || lpTargetObj->Class == 288 || lpTargetObj->Class == 278 || lpTargetObj->Class == 215 || lpTargetObj->Class == 216 || lpTargetObj->Class == 217 || lpTargetObj->Class == 218 || lpTargetObj->Class == 219) { return FALSE; } } if( lpTargetObj->Type != OBJ_USER) { if( CRYWOLF_ALTAR_CLASS_RANGE(lpTargetObj->Class) != FALSE || CRYWOLF_STATUE_CHECK(lpTargetObj->Class) != FALSE ) //HermeX Fix @28/01/2010 { return FALSE; } } if ( skill == 62 ) { gObjBackSpring2(lpTargetObj, lpObj, 3); } if(g_MasterSkillSystem.GetBaseMasterLevelSkill(skill) == 512) //Earth Quake Master { gObjBackSpring2(lpTargetObj, lpObj, 3); } if( skill == 516) { gObjBackSpring2(lpTargetObj, lpObj, 3); } if ( skill == 19 || skill == 20 || skill == 21 || skill == 22 || skill == 23 || skill == 260 || skill == 261 || skill == 262 || skill == 270 || skill == 326 || skill == 327 || skill == 328 || skill == 329 || skill == 479 ) { gObjAddMsgSendDelay(lpTargetObj, 2, lpObj->m_Index, 150, 0); } else if ( skill == 3 || skill == 379 || skill == 480 ) // Poison { if ( retResistance(lpTargetObj, 2) == 0 ) { gObjAddMsgSendDelay(lpTargetObj, 2, lpObj->m_Index, 150, 0); return TRUE; } return FALSE; } else if ( skill == 1 || skill == 384 ) { if(gObjCheckUsedBuffEffect(lpObj, AT_POISON) == 0) { if ( retResistance(lpTargetObj, 1) == 0 ) { lpTargetObj->lpAttackObj = lpObj; gObjAddBuffEffect(lpTargetObj, AT_POISON, 19, 3, 0, 0, 20); return TRUE; } else { return FALSE; } } else { return FALSE; } } else if ( skill == 38 || skill == 387 ) // Death Poison { if(gObjCheckUsedBuffEffect(lpTargetObj, AT_POISON) == 0) { if ( retResistance(lpTargetObj, 1) == 0 ) { lpTargetObj->lpAttackObj = lpObj; gObjAddBuffEffect(lpTargetObj, AT_POISON, 19, 3, 0, 0, 10); return TRUE; } else { return FALSE; } } else { return FALSE; } return TRUE; } else if ( skill == 7 || skill == 39 || g_MasterSkillSystem.GetBaseMasterLevelSkill(skill) == 450 || skill == 389 || skill == 489 ) //Season4 add-on { if(gObjCheckUsedBuffEffect(lpTargetObj, AT_ICE) == 0) { if ( retResistance(lpTargetObj, 0) == 0 ) { lpTargetObj->lpAttackObj = lpObj; lpTargetObj->DelayActionTime = 800; lpTargetObj->DelayLevel = 1; gObjAddBuffEffect(lpTargetObj, AT_ICE, 20, 0, 0, 0, 10); } else { return FALSE; } } else { return FALSE; } } else if ( skill == 51 || skill == 424 ) // Ice Arrow { if(gObjCheckUsedBuffEffect(lpTargetObj, AT_ICE_ARROW) == 0) { if ( retResistance(lpTargetObj, 0) == 0 ) { gObjAddBuffEffect(lpTargetObj, AT_ICE_ARROW, 0, 0, 0, 0, 7); lpTargetObj->PathCount = 0; lpTargetObj->PathStartEnd = 0; //Season3 add-on gObjSetPosition(lpTargetObj->m_Index, lpTargetObj->X, lpTargetObj->Y); } else { return FALSE; } } else { return FALSE; } } return TRUE; }
//006bc390 //CGUseItemRecv //CGUseItemRecv bool CPeriodItemEx::SetPeriodItemInfo(LPOBJ lpObj,WORD wItemCode,DWORD dwSerial,DWORD dwDuration) //~OK { if( !lpObj ) return false; if( lpObj->Type != OBJ_USER || lpObj->Connected < PLAYER_LOGGED ) return false; int iInventoryPosition = 0; DWORD dwExpireDate = 0; CItem* lpItem = NULL; ITEMDATA ItemData; LPBUFF_EFFECT_DATE lpBuffData = NULL; LPITEMEFFECT lpItemEffect = NULL; if( !dwSerial ) { lpBuffData = g_BuffEffectSlot.GetEffectDataFromItemCode(wItemCode); lpItemEffect = g_ItemAddOption.GetItemEffectData(wItemCode); if( !lpBuffData || !lpItemEffect ) return false; if( gObjAddBuffEffect(lpObj,lpBuffData->btIndex,dwDuration) == TRUE ) { ItemData.Clear(); ItemData.btType = 1; ItemData.wItemCode = wItemCode; ItemData.btTmp = lpBuffData->btViewPortIndex; ItemData.btEffectType1 = lpItemEffect->wEffectType1; ItemData.btEffectType2 = lpItemEffect->wEffectType2; ItemData.iDuration = dwDuration; ItemData.iUnk3 = 0; ItemData.lCurentDate = this->GetCurrentDate(); ItemData.lExpireDate = this->GetExpireDate(dwDuration); } else { return FALSE; } } else { iInventoryPosition = this->GetItemFromInventory(lpObj,wItemCode,dwSerial); if( iInventoryPosition == -1 ) { return false; } lpItem = &lpObj->pInventory[iInventoryPosition]; lpItem->SetPeriodItem(); GCInventoryItemOneSend(lpObj->m_Index, iInventoryPosition); dwExpireDate = this->GetExpireDate(dwDuration); AddPeriodItemData(lpObj,wItemCode,dwSerial,dwDuration,dwExpireDate); ItemData.Clear(); ItemData.wItemCode = wItemCode; ItemData.btType = 2; ItemData.dwSerial = lpItem->GetNumber(); ItemData.iDuration = dwDuration; ItemData.iUnk3 = 0; ItemData.lCurentDate = this->GetCurrentDate(); ItemData.lExpireDate = dwExpireDate; } RequestPeriodItemInsert(lpObj,&ItemData,dwDuration); return true; }
void TMonsterAI::ProcessStateMsg(LPOBJ lpObj, int iMsgCode, int iIndex, int aMsgSubCode) { switch ( iMsgCode ) { case 1: gObjMonsterDieGiveItem(lpObj, &gObj[iIndex]); break; case 2: if ( gObj[iIndex].Live != FALSE ) { gObjBackSpring(lpObj, &gObj[iIndex]); } break; case 3: if ( lpObj->TargetNumber != -1 ) { lpObj->m_Agro.DelAgro(lpObj->TargetNumber); } lpObj->TargetNumber = -1; lpObj->LastAttackerID = -1; lpObj->m_ActState.Emotion = 0; lpObj->m_ActState.Attack = 0; lpObj->m_ActState.Move = 0; lpObj->NextActionTime = 1000; break; case 4: lpObj->m_ActState.Emotion = 3; lpObj->m_ActState.EmotionCount = 1; break; case 55: gObjAttack(lpObj, &gObj[iIndex], NULL, FALSE, FALSE, 0, FALSE, 0, 0); break; case 56: { LPOBJ lpTargetObj = &gObj[iIndex]; if(gObjCheckUsedBuffEffect(lpTargetObj, AT_POISON) == 0) { if ( retResistance(lpTargetObj, 1) == FALSE ) { lpTargetObj->lpAttackObj = lpObj; gObjAddBuffEffect(lpTargetObj, AT_POISON, 19, 3, 0, 0, aMsgSubCode); } } } break; case 57: { LPOBJ lpTargetObj = &gObj[iIndex]; gObjBackSpring2(lpTargetObj, lpObj, aMsgSubCode); } break; } }