void CCrywolfAltar::CrywolfAltarAct(int iIndex) { if ( !gObjIsConnected(iIndex)) { return; } if ( gObj[iIndex].Type != OBJ_NPC || CRYWOLF_ALTAR_CLASS_RANGE(gObj[iIndex].Class) == FALSE ) { return; } int iUserIndex = this->GetAltarUserIndex(gObj[iIndex].Class); if ( gObjIsConnected(iUserIndex) == FALSE ) { if ( iUserIndex != -1 ) { this->ResetAltarUserIndex(iIndex, gObj[iIndex].Class); } return; } if ( gObjIsConnected(&gObj[iUserIndex]) == FALSE ) { this->ResetAltarUserIndex(iIndex, gObj[iIndex].Class); return; } LPOBJ lpObj = &gObj[iIndex]; LPOBJ lpUserObj = &gObj[iUserIndex]; if ( lpUserObj->Live != FALSE && lpUserObj->MapNumber == MAP_INDEX_CRYWOLF_FIRSTZONE ) { if ( abs(lpObj->Y-lpUserObj->Y) <= 0 && abs(lpObj->X - lpUserObj->X) <= 0 ) { if ( this->CheckAltarValidContract(gObj[iIndex].Class) != FALSE ) { //Empty ;D } else { this->SetAltarValidContract(iIndex, gObj[iIndex].Class); } } else { this->ResetAltarUserIndex(iIndex, gObj[iIndex].Class); } } else { this->ResetAltarUserIndex(iIndex, gObj[iIndex].Class); } }
void CCrywolfAltar::SetAllAltarObjectIndex() { for ( int i=0;i<OBJ_MAXMONSTER;i++) { if ( !gObjIsConnected(i) ) continue; if ( gObj[i].MapNumber != MAP_INDEX_CRYWOLF_FIRSTZONE ) continue; if ( CRYWOLF_ALTAR_CLASS_RANGE(gObj[i].Class ) != FALSE ) g_CrywolfNPC_Altar.SetAltarObjIndex(gObj[i].Class, i); } }
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; }