BOOL NpcRusipher(LPOBJ lpNpc, LPOBJ lpObj) { if ( gDevilSquareEvent == FALSE ) { return TRUE; } int aIndex = lpObj->m_Index; #ifdef BEREZNUK if ( lpObj->m_PK_Level >= 4 && !g_AllowPKEventDS ) { GCServerMsgStringSend(lMsg.Get(MSGGET(13,72)),lpObj->m_Index,1); return TRUE; } #endif if ( (lpObj->m_IfState.use ) > 0 ) { return TRUE; } if ( gUserFindDevilSquareInvitation(aIndex) == FALSE ) { GCServerCmd(lpObj->m_Index, 1, 2 ,0); } else if (g_DevilSquare.GetState() == 1 ) { PMSG_TALKRESULT pMsg; pMsg.h.c = 0xC3; pMsg.h.headcode = 0x30; pMsg.h.size = sizeof(pMsg); pMsg.result = 0x04; DataSend(aIndex, (LPBYTE)&pMsg, pMsg.h.size); lpObj->m_IfState.use = 1; lpObj->m_IfState.type = 12; } else { GCServerCmd(lpObj->m_Index, 1, 3, 0); } return TRUE; }
BOOL NpcFasi(LPOBJ lpNpc, LPOBJ lpObj) { if ( gDevilSquareEvent != FALSE ) { GCServerCmd(lpObj->m_Index, 1, 6, 0); } if ( lpObj->m_PK_Level > 4 ) { if ( PvP.gPkLimitFree == FALSE ) { int numbertext = rand() % 3; switch ( numbertext ) { case 0: ChatTargetSend(lpNpc, lMsg.Get(MSGGET(4, 98)), lpObj->m_Index); break; case 1: ChatTargetSend(lpNpc, lMsg.Get(MSGGET(4, 99)), lpObj->m_Index); break; case 2: ChatTargetSend(lpNpc, lMsg.Get(MSGGET(4, 100)), lpObj->m_Index); break; } lpNpc->TargetNumber = -1; // Apply Deathway Fix, change 0 to -1; return TRUE; } } return FALSE; }
BOOL NpcFasi(LPOBJ lpNpc, LPOBJ lpObj) { if ( gLanguage != 0 ) { if ( gDevilSquareEvent != FALSE ) { GCServerCmd(lpObj->m_Index, 1, 6, 0); } } if ( lpObj->m_PK_Level > 4 ) { int hour = 0; int min = 0; if ( lpNpc->TargetNumber != lpObj->m_Index ) { if ( gObjGetPkTime(lpObj, hour, min) == TRUE ) { char szTemp[100]; wsprintf(szTemp, lMsg.Get(MSGGET(4, 79)), hour, min); ChatTargetSend(lpNpc, szTemp, lpObj->m_Index); lpNpc->TargetNumber = lpObj->m_Index; /*if ( gPkLimitFree == FALSE ) { return TRUE; }*/ } } else if ( gPkLimitFree == FALSE ) { int numbertext = rand() % 3; switch ( numbertext ) { case 0: ChatTargetSend(lpNpc, lMsg.Get(MSGGET(4, 98)), lpObj->m_Index); break; case 1: ChatTargetSend(lpNpc, lMsg.Get(MSGGET(4, 99)), lpObj->m_Index); break; case 2: ChatTargetSend(lpNpc, lMsg.Get(MSGGET(4, 100)), lpObj->m_Index); break; } lpNpc->TargetNumber = 0; // Apply Deathway Fix, change 0 to -1; return TRUE; } } return FALSE; }
BOOL NpcDeviasMadam(LPOBJ lpNpc, LPOBJ lpObj) { if ( gEnableEventNPCTalk != FALSE ) { GCServerCmd(lpObj->m_Index, 4, 1, 0); } return FALSE; }
BOOL NpcNoriaRara(LPOBJ lpNpc, LPOBJ lpObj) { if ( gEnableEventNPCTalk != FALSE ) { GCServerCmd(lpObj->m_Index, 4, 2, 0); } return FALSE; }
BOOL NpcRolensiaGuard(LPOBJ lpNpc, LPOBJ lpObj) { if( gEnableEventNPCTalk != FALSE ) { GCServerCmd(lpObj->m_Index, 4, 0, 0); } return TRUE; }
BOOL NpcSnowman(LPOBJ lpNpc,LPOBJ lpObj) { if( !gObjIsConnected(lpObj->m_Index) ) { return true; } GCServerCmd(lpObj->m_Index,0x11,1,0); return true; }
BOOL NpcRusipher(LPOBJ lpNpc, LPOBJ lpObj) { if ( gDevilSquareEvent == FALSE ) { return TRUE; } int aIndex = lpObj->m_Index; if ( (lpObj->m_IfState.use ) > 0 ) { return TRUE; } if ( gUserFindDevilSquareInvitation(aIndex) == FALSE ) { GCServerCmd(lpObj->m_Index, 1, 2 ,0); } else if ( g_DevilSquare.GetState() == 1 ) { PMSG_TALKRESULT pMsg; pMsg.h.c = 0xC3; pMsg.h.headcode = 0x30; pMsg.h.size = sizeof(pMsg); pMsg.result = 0x04; DataSend(aIndex, (LPBYTE)&pMsg, pMsg.h.size); lpObj->m_IfState.use = 1; lpObj->m_IfState.type = 12; } else { GCServerCmd(lpObj->m_Index, 1, 3, 0); } return TRUE; }
BOOL NpcShadowPhantom(LPOBJ lpNpc, LPOBJ lpObj) { if ( gObjIsConnected(lpObj->m_Index) == FALSE ) { return TRUE; } #if (__QUEST_SYSTEM__ == 1) PMSG_TALKRESULT_EX pMsg; pMsg.h.c = 0xC3; pMsg.h.headcode = 0xF9; pMsg.h.size = sizeof(pMsg); pMsg.btResult = TRUE; pMsg.wNpcId = 257; lpObj->TargetShopNumber = 257; DataSend(lpObj->m_Index,(LPBYTE)&pMsg,pMsg.h.size); #else if ( lpObj->Level > g_NPCBuffLevel || lpObj->ChangeUP2 != FALSE ) { GCServerCmd(lpObj->m_Index, 0x0D, 0, 0); return TRUE; } #if (__CUSTOM__ == 1) int Defense = lpObj->Level / g_ElfBuffDefenseDiv + g_ElfBuffDefenseStart; int Attack = lpObj->Level / g_ElfBuffAttackDiv + g_ElfBuffAttackStart; gObjAddBuffEffect(lpObj,BUFF_NPC_PHANTOM,ADD_OPTION_ATTACK_DAMAGE,Attack,ADD_OPTION_DEFENSE,Defense,0,0,g_ElfBuffTime); #else int Defense = lpObj->Level / 5 + 50; int Attack = lpObj->Level / 3 + 45; gObjAddBuffEffect(lpObj,BUFF_NPC_PHANTOM,ADD_OPTION_ATTACK_DAMAGE,Attack,ADD_OPTION_DEFENSE,Defense,0,0,1800000); #endif #endif return TRUE; }
BOOL NpcServerDivision(LPOBJ lpNpc, LPOBJ lpObj) { if ( gEnableServerDivision == FALSE ) { return TRUE; } if ( lpObj->lpGuild != NULL ) { GCServerCmd(lpObj->m_Index, 6, 0, 0); return TRUE; } lpObj->m_IfState.type = 11; lpObj->m_IfState.state = 0; lpObj->m_IfState.use = 1; return FALSE; }
BOOL NpcShadowPhantom(LPOBJ lpNpc, LPOBJ lpObj) { if ( gObjIsConnected(lpObj->m_Index) == FALSE ) { return TRUE; } if ( lpObj->Level > MAX_NPC_PHANTOM_BUFFER ) { GCServerCmd(lpObj->m_Index, 0x0D, 0, 0); return TRUE; } lpObj->m_iSkillNPCHelpTime = GetTickCount(); lpObj->m_iSkillNPCDefense = lpObj->Level / 5 + 50; // FORMULA lpObj->m_iSkillNPCAttack = lpObj->Level / 3 + 45; // FORMULA lpObj->m_ViewSkillState[eVS_NPC_HELP] = 1; GCStateInfoSend(lpObj, 1, eVS_NPC_HELP); return TRUE; }
BOOL NpcAngelMessanger(LPOBJ lpNpc, LPOBJ lpObj) { if ( (lpObj->m_IfState.use ) > 0 ) { return TRUE; } int iIndex = lpObj->m_Index; if ( gObj[iIndex].m_PK_Level >= 4 ) { GCServerCmd(iIndex, 0x39, 0, 0); return TRUE; } int iITEM_LEVEL = 0; iITEM_LEVEL = g_BloodCastle.CheckEnterItem(lpObj->m_Index); if ( iITEM_LEVEL != 0 ) { if ( iITEM_LEVEL != 10 && g_BloodCastle.CheckEnterLevel(lpObj->m_Index, iITEM_LEVEL-1) ) { if ( g_BloodCastle.CheckEnterFreeTicket(lpObj->m_Index) == true ) { iITEM_LEVEL = 10; } } if ( iITEM_LEVEL == 10 ) { for (int i=0;i<MAX_CLOACK_LEVEL;i++) { if ( g_BloodCastle.CheckEnterLevel(lpObj->m_Index, i) == FALSE ) { iITEM_LEVEL = i; } } } if ( g_BloodCastle.GetCurrentState(iITEM_LEVEL-1) == BC_STATE_CLOSED && g_BloodCastle.CheckCanEnter(iITEM_LEVEL-1) != false ) { PMSG_TALKRESULT pMsg; pMsg.h.c = 0xC3; pMsg.h.headcode = 0x30; pMsg.h.size = sizeof(pMsg); pMsg.result = 0x06; DataSend(lpObj->m_Index, (LPBYTE)&pMsg, pMsg.h.size); lpObj->m_IfState.use = 1; lpObj->m_IfState.type = 12; } else { GCServerCmd(lpObj->m_Index, 1, 0x14, 0); } } else { GCServerCmd(lpObj->m_Index, 1, 0x15, 0); } return FALSE; }
BOOL NpcAngelKing(LPOBJ lpNpc, LPOBJ lpObj) { int iITEM_LEVEL = 0; if ( ( (lpObj->m_cBloodCastleIndex < 0)?FALSE:(lpObj->m_cBloodCastleIndex > MAX_BLOOD_CASTLE_LEVEL-1)?FALSE:TRUE ) == FALSE ) { GCServerCmd(lpObj->m_Index, 1, 0x18, 0); return FALSE; } LogAddTD("[Blood Castle] (%d) [%s][%s] Talk to Angel King", lpObj->m_cBloodCastleIndex+1, lpObj->AccountID, lpObj->Name); if ( g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_bBC_REWARDED != false ) { GCServerCmd(lpObj->m_Index, 1, 0x2E, 0); return FALSE; } if ( g_BloodCastle.GetCurrentState(lpObj->m_cBloodCastleIndex) != 2 || g_BloodCastle.CheckPlayStart(lpObj->m_cBloodCastleIndex) == false) { GCServerCmd(lpObj->m_Index, 1, 0x18, 0); return FALSE; } if ( lpObj->m_bBloodCastleComplete == true) { GCServerCmd(lpObj->m_Index, 1, 0x2E, 0); return FALSE; } if ( iITEM_LEVEL = iITEM_LEVEL = CHECK_LIMIT( g_BloodCastle.CheckQuestItem(lpObj->m_Index), 3) ) { if ( lpNpc->m_cBloodCastleIndex != lpObj->m_cBloodCastleIndex ) { GCServerCmd(lpObj->m_Index, 1, 0x18, 0); return FALSE; } if ( g_BloodCastle.CheckUserBridgeMember(lpObj->m_cBloodCastleIndex, lpObj->m_Index) == false ) { GCServerCmd(lpObj->m_Index, 1, 0x18, 0); return FALSE; } g_BloodCastle.SetUserState(lpObj->m_Index, 2); g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_iExtraEXP_Win_Quest_Party = lpObj->PartyNumber; g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_iExtraEXP_Win_Quest_Index = lpObj->m_Index; memcpy(g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szWin_Quest_CharName, lpObj->Name, 10); memcpy(g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szWin_Quest_AccountID, lpObj->AccountID, 10); g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szWin_Quest_CharName[10] = 0; // Zero String terminated g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szWin_Quest_AccountID[10] = 0; // Zero String Terminated LogAddTD("[Blood Castle] (%d) Blood Castle Quest Succeed Result -> Destroy Castle Door [%s][%s]", lpObj->m_cBloodCastleIndex+1, g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szKill_Door_AccountID, g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szKill_Door_CharName); LogAddTD("[Blood Castle] (%d) Blood Castle Quest Succeed Result -> Destroy Saint Status [%s][%s]", lpObj->m_cBloodCastleIndex+1, g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szKill_Door_AccountID, // #error Correct this g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szKill_Status_CharName); LogAddTD("[Blood Castle] (%d) Blood Castle Quest Succeed Result -> Win Quest [%s][%s]", lpObj->m_cBloodCastleIndex+1, g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szWin_Quest_AccountID, g_BloodCastle.m_BridgeData[lpObj->m_cBloodCastleIndex].m_szWin_Quest_CharName); if ( g_BloodCastle.SetBridgeWinner(lpObj->m_cBloodCastleIndex, lpObj->m_Index) == TRUE ) { lpObj->m_bBloodCastleComplete = true; if ( g_BloodCastle.CheckPartyExist(lpObj->m_Index) == FALSE ) { GCServerCmd(lpObj->m_Index, 1, 0x17, 0); LogAddTD("[Blood Castle] (%d) (Account:%s, Name:%s) Succeed Blood Castle Quest", lpNpc->MapNumber-10, lpObj->AccountID, lpObj->Name); } else { GCServerCmd(lpObj->m_Index, 1, 0x17, 0); LogAddTD("[Blood Castle] (%d) (Account:%s, Name:%s) Succeed Blood Castle Quest - More Party to register", lpNpc->MapNumber-10, lpObj->AccountID, lpObj->Name); } } else { LogAddTD("[Blood Castle] (%d) (Account:%s, Name:%s) Winner Already Exist !!", lpNpc->MapNumber-10, lpObj->AccountID, lpObj->Name); return FALSE; } g_BloodCastle.SearchUserDeleteQuestItem(lpObj->m_Index); } else { if ( g_BloodCastle.CheckUserWinnerParty(lpObj->m_cBloodCastleIndex, lpObj->m_Index) == TRUE ) { lpObj->m_bBloodCastleComplete = true; if ( g_BloodCastle.CheckPartyExist(lpObj->m_Index) == FALSE ) { GCServerCmd(lpObj->m_Index, 1, 0x17, 0); LogAddTD("[Blood Castle] (%d) (Account:%s, Name:%s) Succeed Blood Castle Quest", lpNpc->MapNumber-10, lpObj->AccountID, lpObj->Name); } else { GCServerCmd(lpObj->m_Index, 1, 0x17, 0); LogAddTD("[Blood Castle] (%d) (Account:%s, Name:%s) Succeed Blood Castle Quest - More Party to register", lpNpc->MapNumber-10, lpObj->AccountID, lpObj->Name); } return FALSE; } GCServerCmd(lpObj->m_Index, 1, 0x18, 0); } return FALSE; }