BOOL CRaklionBattleUserMng::MoveAllUser(int iGateNumber) //00644EB0 (identical) { BOOL bMoveGateSuccess = FALSE; //loc2 for ( int iCount=0; iCount < this->m_vtUserInfo.size(); iCount++) { bMoveGateSuccess = gObjMoveGate(this->m_vtUserInfo[iCount], iGateNumber); if ( bMoveGateSuccess == TRUE ) { LogAddTD("[ RAKLION ][ BattleUser ] [%s][%s] MoveGate(%d)", gObj[this->m_vtUserInfo[iCount]].AccountID, gObj[this->m_vtUserInfo[iCount]].Name, iGateNumber); } else { this->DeleteUserData(this->m_vtUserInfo[iCount]); LogAddTD( "[ RAKLION ][ BattleUser ] [%s][%s] MoveGate Fail (%d)", gObj[this->m_vtUserInfo[iCount]].AccountID, gObj[this->m_vtUserInfo[iCount]].Name, iGateNumber); gObjMoveGate(this->m_vtUserInfo[iCount], 286); //Raklion Entrance } } return TRUE; }
BOOL CKanturuBattleUserMng::MoveAllUser(int iGateNumber) { int iIndex; BOOL bMoveGateSuccess = FALSE; for ( int iCount=0;iCount<MAX_KANTURU_BATTLE_USER;iCount++) { iIndex = this->m_BattleUser[iCount].GetIndex(); if ( this->m_BattleUser[iCount].IsUseData() ) { bMoveGateSuccess = gObjMoveGate(iIndex, iGateNumber); if ( bMoveGateSuccess == TRUE ) { LogAddTD("[ KANTURU ][ BattleUser ] [%s][%s] MoveGate(%d)", gObj[iIndex].AccountID, gObj[iIndex].Name, iGateNumber); } else { this->DeleteUserData(iIndex); LogAddTD( "[ KANTURU ][ BattleUser ] [%s][%s] MoveGate Fail (%d)", gObj[iIndex].AccountID, gObj[iIndex].Name, iGateNumber); gObjMoveGate(iIndex, 137); } } } return TRUE; }
// ----------------------------------------------------------------------------------------------------------------------- bool CIllusionTemple::SetProc_Prepare(int iTempleIndex) { ILLUSION_TEMPLE_DATA* lpTemple = &this->m_IllusionTemple[iTempleIndex]; int iUserCount = 0; for(int i = OBJ_STARTUSERINDEX; i < OBJMAX; i++) { if((gObj[i].MapNumber == MAP_INDEX_ILLUSION1 + iTempleIndex) && (gObjIsConnected(i) == TRUE)) { ILLUSION_OBJ obj; int iTeamIndex = iUserCount % 2; obj.m_BonusCount = 0; obj.m_Index = i; obj.m_TeamIndex = iTeamIndex; obj.m_TempleIndex = iTempleIndex; lpTemple->m_Teams[iTeamIndex].m_Members.push_back(obj); switch(iTeamIndex) { case IT_TEAM_RED: gObj[i].m_Change = IT_MASK_RED; gObjMoveGate(i, 154 + iTempleIndex); break; case IT_TEAM_BLUE: gObj[i].m_Change = IT_MASK_BLUE; gObjMoveGate(i, 148 + iTempleIndex); break; } gObj[i].m_IllusionTeam = iTeamIndex; iUserCount++; } } if(iUserCount < MIN_ILLUSION_PLAYERCOUNT) { this->SetTempleState(iTempleIndex, IT_STATE_CLOSED); CLog.LogAdd("[IllusionTemple] Event Closed - Min Users Not Reached (%d)", iTempleIndex + 1); return FALSE; } lpTemple->m_TickCount = GetTickCount() + (IT_PREPARE_TIME * 60000); this->SendMsgTemple(iTempleIndex, 1, "Prepare-se, o evento comecara em %d minuto(s).", IT_PREPARE_TIME); return TRUE; }
// ---------------------------------------------------------------------------------------------------------------- //## функция сепаратора для протокола void DuelSystem::RecvWatchRequest(LPOBJ lpObj, PMSG_DUEL_REQUEST_WATCH* lpMsg) { if(lpObj->m_IfState.use == 0 || lpObj->m_IfState.type != 20) { return; } // ---- lpObj->m_IfState.use = 0; lpObj->m_IfState.type = 0; // ---- if(lpMsg->btRoomIndex >= 0 && lpMsg->btRoomIndex < MAX_DUEL_ROOMS) { if(this->g_DuelRooms[lpMsg->btRoomIndex].RoomFree == TRUE) { GCServerMsgStringSend("Sorry, but this room is free!", lpObj->m_Index, 1); return; } // ---- for(short i = 0; i < MAX_DUEL_SEPARATORS; ++i) { if(this->g_DuelRooms[lpMsg->btRoomIndex].szSeparators[i] == NULL) { if(gObjMoveGate(lpObj->m_Index, g_DuelGates[lpMsg->btRoomIndex].SeparatorGate)) { this->g_DuelRooms[lpMsg->btRoomIndex].szSeparators[i] = lpObj; // ---- this->SendSpectatorList(lpObj, lpMsg->btRoomIndex); // ---- this->SendSpectatorList(lpMsg->btRoomIndex); // ---- this->SendSpectatorAdd(i, lpMsg->btRoomIndex); // ---- GCServerMsgStringSend("Please sit down and watch this duel. Have fun.", lpObj->m_Index, 1); // ---- if(Config.Duel.Logging) { Log.ConsoleOutPut(1, c_Blue, t_Duel,"[Duel System][%s][%s] Spectator join to room: [%d]", lpObj->AccountID, lpObj->Name, lpMsg->btRoomIndex + 1); } // ---- GCStateInfoSendg(lpObj, 1, 98); // ---- this->SendLifebarInit(lpObj, lpMsg->btRoomIndex); // ---- this->SendLifebarStatus(lpObj, lpMsg->btRoomIndex); // ---- this->UpdateDuelScore(lpMsg->btRoomIndex); // ---- AddTab[lpObj->m_Index].DUEL_SpecVisible = 1; // ---- return; } GCServerMsgStringSend("Failed to move to Duel Room!", lpObj->m_Index, 1); return; } } GCServerMsgStringSend("Sorry, but this room is full!", lpObj->m_Index, 1); return; } }
void CKanturu::CheckUserOnKanturuBossMap() { for ( int iCount=OBJ_STARTUSERINDEX;iCount<OBJMAX;iCount++) { if ( gObj[iCount].Connected == PLAYER_PLAYING && gObj[iCount].Type == OBJ_USER && gObj[iCount].MapNumber == MAP_INDEX_KANTURU_BOSS) { if ( gObj[iCount].m_bKanturuEntranceByNPC == FALSE ) { if ( (gObj[iCount].Authority&2) != 2 ) { if ( gObj[iCount].RegenOk == 0 && gObj[iCount].m_State == 2 && gObj[iCount].Live == TRUE) { gObjMoveGate(iCount, 17); LogAdd( "[ KANTURU ][ Invalid User ] Invalid Kanturu Boss Map User[%s][%s]", gObj[iCount].AccountID, gObj[iCount].Name); } } } } } }
void CDoppelganger::State_STANDBY(){ this->StandbyTimer -= 1; if(this->StandbyTimer == ((this->StandByTime*60)-30)){ //30 Seconds to Move when Finish for(int X=0; X < 5;X++){ if(this->Player[X] >= OBJ_STARTUSERINDEX && gObjIsConnected(this->Player[X])){ if(gObj[this->Player[X]].MapNumber == this->EventMap){ gObjMoveGate(this->Player[X],267); } this->Player[X] = -1; } } LogAddTD("[Doppelganger] Remove Players from Event Map"); ///Set Variables this->Timer = 0; this->PlayersCount = 0; this->MonsterPassed = 0; } if(this->StandbyTimer == 0){ this->State = NONE; LogAddTD("[Doppelganger] SetState->NONE"); } }
// ----------------------------------------------------------------------------------------------------------------------- void CIllusionTemple::NpcRegister(OBJECTSTRUCT* lpObj, PMSG_IT_REGISTER* pMsg) { if(lpObj->m_IfState.use > 0) { CLog.LogAdd("[IllusionTemple] Interface State Error (%d)(%d)(%s)", lpObj->m_IfState.use, lpObj->m_IfState.type, lpObj->Name); return; } if(lpObj->pInventory[pMsg->TicketPosition].m_Type != ITEMGET(13, 51) || lpObj->pInventory[pMsg->TicketPosition].m_Level != pMsg->TargetTemple ) { GCServerMsgStringSend("You missed Illusion Temple Ticket.", lpObj->m_Index, 1); return; } pMsg->TargetTemple--; if(IT_FLOOR_RANGE(pMsg->TargetTemple) == FALSE) { CLog.LogAdd("[IllusionTemple] Index out of range (%d)(%s)", pMsg->TargetTemple, &lpObj->Name[0]); return; } if(this->m_IllusionTemple[pMsg->TargetTemple].m_iUserCount >= 10) { GCServerMsgStringSend("[IllusionTemple] Event is already Full!", lpObj->m_Index, 1); return; } ILLUSION_OBJ obj; obj.m_Index = lpObj->m_Index; obj.m_TeamIndex = -1; obj.m_BonusCount = 0; obj.m_TempleIndex = pMsg->TargetTemple; gObjInventoryDeleteItem(lpObj->m_Index, pMsg->TicketPosition); GCInventoryItemDeleteSend(lpObj->m_Index, pMsg->TicketPosition, 1); if ( lpObj->PartyNumber >= 0 ) { PMSG_PARTYDELUSER pMsg; int iPartyIndex = gParty.GetIndex(lpObj->PartyNumber, lpObj->m_Index, lpObj->DBNumber); if ( iPartyIndex >= 0 ) { pMsg.Number = iPartyIndex; CGPartyDelUser(&pMsg, lpObj->m_Index); } } lpObj->m_IllusionIndex = pMsg->TargetTemple; gObjSetIllusionKillCount(lpObj->m_Index, KILLCOUNT_RESET, 0); gObjMoveGate(lpObj->m_Index, 142 + pMsg->TargetTemple); }
bool CIllusionTemple::SetProc_Closed(int iTempleIndex) { this->SynchronizeTemple(iTempleIndex); for(int i = OBJ_STARTUSERINDEX; i < OBJMAX; i++) { if(gObj[i].MapNumber == MAP_INDEX_ILLUSION1 + iTempleIndex) { for(int it = 0; it < INVENTORY_SIZE; it++) { if(gObj[i].pInventory[it].IsItem()) { if(gObj[i].pInventory[it].m_Type == ITEMGET(14, 64)) { gObjInventoryDeleteItem(gObj[i].m_Index, it); GCInventoryItemDeleteSend(gObj[i].m_Index, it, 1); } } } gObj[i].m_Change = -1; gObjViewportListProtocolCreate(&gObj[i]); gObj[i].m_IllusionIndex = -1; gObj[i].m_IllusionTeam = -1; gObj[i].m_IllusionKillCount = 0; gObjMoveGate(i, 257); } } this->m_IllusionTemple[iTempleIndex].m_Statues[IT_STATUE_UP] = -1; this->m_IllusionTemple[iTempleIndex].m_Statues[IT_STATUE_DOWN] = -1; this->m_IllusionTemple[iTempleIndex].m_BallOwner = -1; this->m_IllusionTemple[iTempleIndex].m_iUserCount = 0; this->m_IllusionTemple[iTempleIndex].m_Teams[IT_TEAM_RED].m_Members.clear(); this->m_IllusionTemple[iTempleIndex].m_Teams[IT_TEAM_RED].m_BallOwner = -1; this->m_IllusionTemple[iTempleIndex].m_Teams[IT_TEAM_RED].m_Score = 0; this->m_IllusionTemple[iTempleIndex].m_Teams[IT_TEAM_BLUE].m_Members.clear(); this->m_IllusionTemple[iTempleIndex].m_Teams[IT_TEAM_BLUE].m_BallOwner = -1; this->m_IllusionTemple[iTempleIndex].m_Teams[IT_TEAM_BLUE].m_Score = 0; return TRUE; }
BOOL CMoveCommand::MoveFree2Kalima(LPOBJ lpObj) { int iIdx = GetKalimaGateLevel(lpObj); if ( iIdx >= 6 ) { iIdx = 5; } if ( iIdx < 0 ) { return FALSE; } int iGateNumber = iIdx + 88; return gObjMoveGate(lpObj->m_Index, iGateNumber); }
// ----------------------------------------------------------------------------------------------------------------------- bool CIllusionTemple::SetProc_End(int iTempleIndex) { PMSG_ILLUSION_STATE pMsg; C1SubHeadSet((BYTE*)&pMsg, 0xBF, 0x09, sizeof(pMsg)); pMsg.Unknow = 0; pMsg.State = 3; this->SendDataTemple(iTempleIndex, (BYTE*)&pMsg, pMsg.h.size); for(int i = OBJ_STARTUSERINDEX; i < OBJMAX; i++) { if(IT_MAP_RANGE(gObj[i].MapNumber) == TRUE) { for(int it = 0; it < INVENTORY_SIZE; it++) { if(gObj[i].pInventory[it].IsItem()) { if(gObj[i].pInventory[it].m_Type == ITEMGET(14, 64)) { gObjInventoryDeleteItem(gObj[i].m_Index, i); GCInventoryItemDeleteSend(gObj[i].m_Index, i, 1); } } } if(iTempleIndex == (gObj[i].MapNumber - MAP_INDEX_ILLUSION1)) { gObj[i].m_Change = -1; gObjViewportListProtocolCreate(&gObj[i]); gObjMoveGate(i, 142 + iTempleIndex); } } } this->UnSetTempleMonsters(iTempleIndex); // Send Items! // Give Bonus! this->m_IllusionTemple[iTempleIndex].m_TickCount = GetTickCount() + 60000; return TRUE; }
void CKanturuTowerOfRefinement::SetState_END() { LogAddC(5, "[ KANTURU ][ TowerOfRefinement ] State(%d) -> END", this->m_iTowerOfRefinementState); this->SetTowerOfRefinementState(KANTURU_TOWER_OF_REFINEMENT_END); this->SetEntrancePermit(FALSE); this->SetUseTowerOfRefinement(FALSE); for ( int iCount=0;iCount<OBJMAX;iCount++) { if ( gObj[iCount].Type == OBJ_USER && gObj[iCount].MapNumber == MAP_INDEX_KANTURU_BOSS ) { gObjMoveGate(iCount, 136); LogAddTD("[ KANTURU ][ TowerOfRefinement ] State End:Kick Out [%s][%s]", gObj[iCount].AccountID, gObj[iCount].Name); } } }
void CDoppelganger::CheckPartyStatus(){ for(int X=0; X < 5;X++){ if(this->Player[X] >= OBJ_STARTUSERINDEX && gObj[this->Player[X]].MapNumber == this->EventMap && gObjIsConnected(this->Player[X])){ LPOBJ gTargetObj = &gObj[this->Player[X]]; if(gTargetObj->PartyNumber != this->PartyNumber){ gObjMoveGate(this->Player[X],267); this->Player[X] = -1; if(X==0){ LogAddTD("[Doppelganger] Party Leader has not in Party or Party was Disolved - EVENT FINISH FAILED"); this->Status = FAILED; //Success this->State = FINISHED; return; } } } } }
void cDuelSystem::DuelProtocolCore(LPOBJ lpObj, unsigned char * lpPacket) { PMSG_DEFAULT2* pMsg = (PMSG_DEFAULT2*)lpPacket; switch(pMsg->subcode) { case 0x01: { this->RecvDuelRequest(lpObj, (PMSG_DUEL_REQUEST_START*)lpPacket); break; } case 0x02: { this->RecvDuelAnswer(lpObj, (PMSG_DUEL_ANSWER_START*)lpPacket); break; } case 0x07: { this->RecvWatchRequest(lpObj, (PMSG_DUEL_REQUEST_WATCH*)lpPacket); break; } case 0x09: { if(lpObj->MapNumber == 0x40) { gObjMoveGate(lpObj->m_Index, DuelSystem.Config.DuelGate); } break; } Run(); } }
void cProtoFunc::PlayerConnect(LPOBJ gObj) { LoginMsg(gObj); RingSkin(gObj); PCPoint.InitPCPointForPlayer(gObj); MySQL.Execute("SELECT %s FROM Character WHERE Name = '%s'", Config.ResetColumn, gObj->Name); AddTab[gObj->m_Index].Resets = MySQL.GetInt(); #ifdef _GS if(Config.Duel.Enabled) { if(Config.Duel.Ranking) { g_DuelSystem.DuelSetInfo(gObj->m_Index); } if((!g_DuelSystem.IsOnDuel(gObj->m_Index)) && gObj->MapNumber == 64) { gObjMoveGate(gObj->m_Index, 294); Log.ConsoleOutPut(1, c_Blue ,t_Duel, "[Duel System][%s][%s] Spawn on duel map after duel is not allowed", gObj->AccountID, gObj->Name); } g_DuelSystem.UserDuelInfoReset(gObj); } #endif }
//00415910 - identical void CKalimaGate::KalimaGateAct(int iIndex) { LPOBJ lpObj=NULL; LPOBJ lpObjCallOwner=NULL; if ( OBJMAX_RANGE(iIndex ) == FALSE) { return; } if ( gObj[iIndex].Live == FALSE ) { return; } if ( gObjIsConnected( gObj[iIndex].m_RecallMon ) == PLAYER_EMPTY ) { LogAddTD("[Kalima] Kalima Gate Vanished - Summoner Vanished (SummonIndex:%d, EnterCount:%d)", iIndex, gObj[iIndex].m_cKalimaGateEnterCount ); GCDiePlayerSend( &gObj[iIndex], iIndex, 0, 0); gObjDel(iIndex); gObjCharZeroSet(iIndex); return; } lpObj = &gObj[iIndex]; lpObjCallOwner = &gObj[lpObj->m_RecallMon]; if ( gObj[gObj[iIndex].m_RecallMon].DieRegen > 0 ) { lpObjCallOwner->AccountID[MAX_ACCOUNT_LEN]=0; lpObjCallOwner->Name[MAX_ACCOUNT_LEN]=0; LogAddTD("[Kalima] [%s][%s] Kalima Gate Vanished - Summoner Died (SummonIndex:%d, EnterCount:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, iIndex, gObj[iIndex].m_cKalimaGateEnterCount ); this->DeleteKalimaGate(iIndex, gObj[iIndex].m_RecallMon); return; } if ( gObj[iIndex].m_cKalimaGateEnterCount >= MAX_KALIMA_ENTER ) { lpObjCallOwner->AccountID[MAX_ACCOUNT_LEN]=0; lpObjCallOwner->Name[MAX_ACCOUNT_LEN]=0; LogAddTD("[Kalima] [%s][%s] Kalima Gate Vanished - Enter Count Over (SummonIndex:%d, EnterCount:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, iIndex, gObj[iIndex].m_cKalimaGateEnterCount ); this->DeleteKalimaGate(iIndex, gObj[iIndex].m_RecallMon); return; } DWORD dwTickCount = GetTickCount(); if ( dwTickCount > lpObj->RegenTime + KALIMA_GATE_TIMEOUT ) { lpObjCallOwner->AccountID[MAX_ACCOUNT_LEN]=0; lpObjCallOwner->Name[MAX_ACCOUNT_LEN]=0; LogAddTD("[Kalima] [%s][%s] Kalima Gate Vanished - Time Out (SummonIndex:%d, EnterCount:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, iIndex, gObj[iIndex].m_cKalimaGateEnterCount ); this->DeleteKalimaGate(lpObj->m_Index, lpObjCallOwner->m_Index); return; } if ( lpObj->VPCount < 1 ) { return; } int tObjNum=-1; for ( int i=0;i<MAX_VIEWPORT_MONSTER;i++) { tObjNum = lpObj->VpPlayer[i].number; if ( tObjNum >= 0 ) { if ( gObj[tObjNum].Type == OBJ_USER ) { if ( gObj[tObjNum].Live != FALSE ) { if ( abs(lpObj->Y - gObj[tObjNum].Y) < 2 ) { if ( abs(lpObj->X - gObj[tObjNum].X) < 2 ) { if ( lpObj->m_RecallMon == tObjNum || (gObj[tObjNum].PartyNumber != -1 && lpObjCallOwner->PartyNumber == gObj[tObjNum].PartyNumber )) { int iMoveMapLevel = lpObj->m_Attribute -51; int iMapNumber = iMoveMapLevel + 24; int iGateNumber = g_iKalimaGateGateIndex[iMoveMapLevel]; int iOverLevel = this->GetKalimaGateLevel(tObjNum); if ( iOverLevel >= iMoveMapLevel ) { if ( gObjMoveGate(tObjNum, iGateNumber) == FALSE ) { LogAddTD("[Kalima] [%s][%s] - [%s][%s] move fail (MapNumber:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, gObj[tObjNum].AccountID, gObj[tObjNum].Name, iMapNumber); } else { LogAddTD("[Kalima] [%s][%s] - [%s][%s] Transported by Kalima Gate (SummonIndex:%d, GateNo.:%d, MapNumber:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, gObj[tObjNum].AccountID, gObj[tObjNum].Name, iIndex, iMoveMapLevel + 1, iMapNumber); gObj[iIndex].m_cKalimaGateEnterCount ++; if ( gObj[iIndex].m_cKalimaGateEnterCount >= MAX_KALIMA_ENTER ) { return; } } } } } } } } } } }
int CIllusionTempleEvent::Enter(int aIndex,BYTE Temple,BYTE Pos) { if( g_bIllusionTemple == FALSE ) { return FALSE; } if( IT_TEMPLE_RANGE(Temple) == FALSE ) { return FALSE; } LPOBJ lpObj = &gObj[aIndex]; PMSG_ILLUSIONTEMPLE_ENTER_RESULT pMsg; PHeadSubSetB((LPBYTE)&pMsg,0xBF,0,sizeof( pMsg )); pMsg.result = 0; if( lpObj->Type != OBJ_USER || lpObj->Connected <= PLAYER_LOGGED ) { return FALSE; } if ( lpObj->m_IfState.use != 0 && lpObj->m_IfState.type != 12 ) { return FALSE; } if ( lpObj->m_bPShopOpen == TRUE ) { CGPShopReqClose(lpObj->m_Index); } int bFail = FALSE; int iLevel; int iSerial; #if (ENABLE_FIX_PARTYPK == 0) if ( lpObj->PartyNumber >= 0 ) { if( gParty.GetPartyPkLevel(lpObj->PartyNumber) >= 5 ) { bFail = TRUE; } } else if( lpObj->m_PK_Level >= 4 ) { bFail = TRUE; } if( bFail == TRUE ) { pMsg.result = 7; DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); return FALSE; } #endif if( IsTransformEquipment(aIndex) ) { pMsg.result = 8; DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); return FALSE; } if( m_TempleData[Temple].GetState() != IT_STATE_CLOSED || m_TempleData[Temple].OpenState() == FALSE ) { pMsg.result = 2; DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); return FALSE; } if( gObj[aIndex].pInventory[Pos].IsItem() == TRUE ) { if( gObj[aIndex].pInventory[Pos].m_Type == ITEMGET(13,51) ) { iLevel = gObj[aIndex].pInventory[Pos].m_Level; iSerial = gObj[aIndex].pInventory[Pos].m_Number; if( IT_TEMPLE_RANGE(iLevel-1) == FALSE && gObj[aIndex].pInventory[Pos].m_Durability != 1.0f ) { pMsg.result = 1; DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); return FALSE; } } else if( gObj[aIndex].pInventory[Pos].m_Type == ITEMGET(13,61) ) { iSerial = gObj[aIndex].pInventory[Pos].m_Number; iLevel = GetEnterLevel(aIndex); if( iLevel <= 0 ) { pMsg.result = 1; DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); return FALSE; } } else { pMsg.result = 1; DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); return FALSE; } } else { pMsg.result = 1; DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); return FALSE; } if( RankingCheck(aIndex,Temple,Pos,iLevel) != FALSE ) { return TRUE; } if( CheckCanEnter(aIndex,iLevel) == FALSE ) { pMsg.result = 3; DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); return FALSE; } m_TempleData[iLevel-1].CheckUsers(); int bResult = m_TempleData[iLevel-1].EnterUser(aIndex,Temple,Pos); if( bResult == TRUE ) { if( lpObj->PartyNumber >= 0 ) { PMSG_PARTYDELUSER pMsg; int PartyIndex; PartyIndex = gParty.GetIndex(lpObj->PartyNumber,lpObj->m_Index,lpObj->DBNumber); if( PartyIndex >= 0 ) { pMsg.Number = PartyIndex; CGPartyDelUser(&pMsg,lpObj->m_Index); } } if( lpObj->pInventory[Pos].m_Type == ITEMGET(13,51) ) { lpObj->pInventory[Pos].m_Durability = 0; GCItemDurSend(lpObj->m_Index,Pos,(BYTE)lpObj->pInventory[Pos].m_Durability,0); } else if( lpObj->pInventory[Pos].m_Type == ITEMGET(13,61) ) { if( lpObj->pInventory[Pos].m_Durability > 0.0f ) { lpObj->pInventory[Pos].m_Durability -= 1.0f; GCItemDurSend(lpObj->m_Index,Pos,(BYTE)lpObj->pInventory[Pos].m_Durability,0); } } LogAddTD("[Illusion Temple] (%d) EnterUser: (%s)(%s) class:%d (Serial:%u).", iLevel,lpObj->AccountID,lpObj->Name,lpObj->DbClass,lpObj->pInventory[Pos].m_Number); DataSend(aIndex,(LPBYTE)&pMsg,pMsg.h.size); gObjMoveGate(lpObj->m_Index,141 + iLevel); } m_TempleData[Temple].SendState(0,lpObj->m_Index); SendInfo(); return TRUE; }
void CDoppelganger::EnterDoppelganger(int aIndex,int Invitation) { if(aIndex < (OBJMAX-OBJMAXUSER) || aIndex > (OBJMAX-1)) return; if(!gObjIsConnected(aIndex)) return; LPOBJ lpObj = &gObj[aIndex]; if(this->State != NONE) return; //Get Map Number this->EventMap += 1; if(this->EventMap > 68) this->EventMap = 65; int Gate = 264 + this->EventMap; if(this->OnlyInParty == 1 && lpObj->PartyNumber == -1){ GCServerMsgStringSend("[Doppelganger] Event only for Party.",aIndex,1); return; } this->EventLevel = lpObj->Level / 10; //Set Player who Give the Ticket as Principal Player this->Player[0] = aIndex; LogAddTD("[Doppelganger][%d] Add Player: %d %s",this->PlayersCount,lpObj->m_Index,lpObj->Name); this->PlayersCount += 1; this->PartyNumber = lpObj->PartyNumber; if(lpObj->PartyNumber != -1) { for(int i=OBJ_STARTUSERINDEX; i < OBJMAX;i++){ if(this->PlayersCount < 5 && gObjIsConnected(i)){ LPOBJ gTargetObj = &gObj[i]; if(gTargetObj->PartyNumber == lpObj->PartyNumber && gTargetObj->m_Index != aIndex && gTargetObj->PartyNumber >= 0){ this->Player[this->PlayersCount] = gTargetObj->m_Index; if(this->EventLevel < (gTargetObj->Level / 10)) this->EventLevel = gTargetObj->Level / 10; LogAddTD("[Doppelganger][%d] Add Player: %d %s",this->PlayersCount,gTargetObj->m_Index,gTargetObj->Name); gObjMoveGate(i,Gate); this->PlayersCount++; } } } } //Ticket if(lpObj->pInventory[Invitation].m_Type != ITEMGET(14,111) && (lpObj->pInventory[Invitation].m_Type != ITEMGET(13,125) || lpObj->pInventory[Invitation].m_Durability <= 0.0f)){ return; } if(lpObj->pInventory[Invitation].m_Type == ITEMGET(13,125) && lpObj->pInventory[Invitation].m_Durability >= 1.0f){ lpObj->pInventory[Invitation].m_Durability -= 1.0f; GCItemDurSend2(lpObj->m_Index, Invitation,lpObj->pInventory[Invitation].m_Durability,0); } else { //Delete Mirror gObjInventoryDeleteItem(aIndex,Invitation); GCInventoryItemDeleteSend(aIndex,Invitation,1); } gObjMoveGate(aIndex,Gate); for(int X=0; X < 5;X++){ if(this->Player[X] >= OBJ_STARTUSERINDEX){ this->ChangeMapAttr(TRUE,Doppelganger.Player[X]); //Block Map Entrance this->SendTimeInfo(17,Doppelganger.Player[X]); //Send 30 Seconds to Start } } this->dwTickCount = GetTickCount(); //Set Start Time this->State = PREPARING; LogAddTD("[Doppelganger] SetState->PREPARING"); LogAddTD("[Doppelganger] Players: %d/5, Event Map: %d, Level: %d",this->PlayersCount,this->EventMap,this->EventLevel); }
void CDevilSquare::ProcClose() { if ( this->m_iremainTimeSec != -1 ) { int lc2 = (GetTickCount() - this->m_iTime)/1000; if ( lc2 != 0 ) { this->m_iremainTimeSec -= lc2; this->m_iTime += lc2 * 1000; if ( this->m_iremainTimeSec <= 30 && this->m_bSendTimeCount == FALSE ) { PMSG_SET_DEVILSQUARE pMsg; PHeadSetB((LPBYTE)&pMsg, 0x92, sizeof(pMsg)); pMsg.Type = DevilSquare_CLOSE; for ( int i=OBJ_STARTUSERINDEX; i<OBJMAX; i++) { if ( gObj[i].Connected == PLAYER_PLAYING && gObj[i].Type == OBJ_USER) { if ( BC_MAP_RANGE(gObj[i].MapNumber) == FALSE ) { if ( CC_MAP_RANGE(gObj[i].MapNumber) == FALSE ) { DataSend(i, (BYTE *)&pMsg, pMsg.h.size); } } } } this->m_bSendTimeCount = TRUE; } if (this->m_iremainTimeSec < 1 ) { PMSG_NOTICE pNotice; TNotice::MakeNoticeMsg((TNotice *)&pNotice, 0, lMsg.Get(MSGGET(2, 191))); for ( int i=OBJ_STARTUSERINDEX; i<OBJMAX; i++) { if ( gObj[i].Connected == PLAYER_PLAYING && gObj[i].Type == OBJ_USER) { if ( BC_MAP_RANGE(gObj[i].MapNumber) == FALSE ) { if ( CC_MAP_RANGE(gObj[i].MapNumber) == FALSE ) { DataSend(i, (BYTE *)&pNotice, pNotice.h.size); } } } } LogAddTD(pNotice.Notice); this->SetState(DevilSquare_OPEN); } } } else if ( this->m_iTime < GetTickCount() ) { this->ClearMonstr(); this->m_iRemainTime--; if ( this->m_bFlag == 0 ) { for ( int i=OBJ_STARTUSERINDEX; i<OBJMAX; i++) { if ( gObj[i].Connected == PLAYER_PLAYING ) { if ( DS_MAP_RANGE(gObj[i].MapNumber) != FALSE ) { gObjMoveGate(i, 27); } } } this->ItemClear(); } else { this->CheckInvalidUser(); } if ( this->m_iRemainTime <= 15 ) { if ( (this->m_iRemainTime%5)== 0 ) { PMSG_NOTICE pNotice; TNotice::MakeNoticeMsgEx((TNotice *)&pNotice, 0, lMsg.Get(MSGGET(2, 192)), this->m_iRemainTime); for ( int i=OBJ_STARTUSERINDEX; i<OBJMAX; i++) { if ( gObj[i].Connected == PLAYER_PLAYING && gObj[i].Type == OBJ_USER) { if ( BC_MAP_RANGE(gObj[i].MapNumber) == FALSE ) { if ( CC_MAP_RANGE(gObj[i].MapNumber) == FALSE ) { DataSend(i, (BYTE *)&pNotice, pNotice.h.size); } } } } LogAddTD((char*)pNotice.Notice); } } if ( this->m_iRemainTime == 1 && this->m_iremainTimeSec == -1 ) { this->m_iremainTimeSec = 60; this->m_iTime = GetTickCount(); } else { this->m_iTime = GetTickCount() + 60000; } } }
void cProtoFunc::PlayerConnect(LPOBJ gObj) { AddTab[gObj->m_Index].AddValue = 0; AddTab[gObj->m_Index].ArcherObj = NULL; AddTab[gObj->m_Index].AFK_MapNumber = 0; AddTab[gObj->m_Index].AFK_Timer = 0; AddTab[gObj->m_Index].AFK_X = 0; AddTab[gObj->m_Index].AFK_Y = 0; AddTab[gObj->m_Index].PostDelay = 0; AddTab[gObj->m_Index].ExType = -1; AddTab[gObj->m_Index].AddType = -1; AddTab[gObj->m_Index].MarryType = -1; AddTab[gObj->m_Index].ResType = -1; MySQL.Execute("SELECT IsMarried FROM Character WHERE Name = '%s'", gObj->Name); AddTab[gObj->m_Index].IsMarried = MySQL.GetInt(); MySQL.Execute("SELECT MarryName FROM Character WHERE Name = '%s'", gObj->Name); MySQL.GetString(AddTab[gObj->m_Index].MarryName); MySQL.Execute("SELECT %s FROM Character WHERE Name = '%s'", Config.ResetColumn, gObj->Name); AddTab[gObj->m_Index].Resets = MySQL.GetInt(); LoginMsg(gObj); RingSkin(gObj); g_PointShop.GetInfo(gObj->m_Index); if(cProtection.CheckFeature(cProtection.VIPSystem)) { if(Config.VIPServ.Enabled) { MySQL.Execute("SELECT %s FROM [%s].[dbo].[MEMB_INFO] WHERE memb___id='%s'",Config.VIPServ.Column,MySQL.szDatabase2,gObj->AccountID); AddTab[gObj->m_Index].IsVipServer = MySQL.GetInt(); MySQL.Execute("SELECT %s FROM [%s].[dbo].[MEMB_INFO] WHERE memb___id='%s'",Config.VIPServ.ColumnDate,MySQL.szDatabase2,gObj->AccountID); AddTab[gObj->m_Index].VipMinutesServer = MySQL.GetInt(); if(AddTab[gObj->m_Index].IsVipServer > 0) { DWORD ThreadID; HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)VipTickServer, (void*)gObj->m_Index, 0, &ThreadID); if ( hThread == 0 ) { cLog.ConsoleOutPut(0, cLog.c_Red,cLog.t_NULL,"CreateThread() failed with error %d", GetLastError()); return; } CloseHandle(hThread); Chat.MessageLog(1, cLog.c_Red, cLog.t_VIP, gObj, "[VIP] Left %d minutes of VIP Server.", AddTab[gObj->m_Index].VipMinutesServer); } else { Chat.MessageLog(1, cLog.c_Red, cLog.t_VIP, gObj, "[VIP] You are not vip user! Disconnected from the server."); CloseClient(gObj->m_Index); } } if(!Config.VIPServ.Enabled && VIP.Enabled) { MySQL.Execute("SELECT %s FROM [%s].[dbo].[Character] WHERE Name='%s'",VIP.Column,MySQL.szDatabase,gObj->Name); AddTab[gObj->m_Index].IsVipInGame = MySQL.GetInt(); MySQL.Execute("SELECT %s FROM [%s].[dbo].[Character] WHERE Name='%s'",VIP.ColumnDate,MySQL.szDatabase,gObj->Name); AddTab[gObj->m_Index].IsInGameVipMinutes = MySQL.GetInt(); if(AddTab[gObj->m_Index].IsVipInGame > 0) { DWORD ThreadID; HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)VipInGameServer, (void*)gObj->m_Index, 0, &ThreadID); if ( hThread == 0 ) { cLog.ConsoleOutPut(0, cLog.c_Red,cLog.t_NULL,"CreateThread() failed with error %d", GetLastError()); return; } CloseHandle(hThread); Chat.MessageLog(1, cLog.c_Red, cLog.t_VIP, gObj, "[VIP] Left %d minutes of VIP.", AddTab[gObj->m_Index].IsInGameVipMinutes ); } } } #ifdef _GameServer_ if(Config.Duel.Enabled) { if(Config.Duel.Ranking) { DuelSetInfo(gObj->m_Index); } if((!g_DuelSystem.IsOnDuel(gObj->m_Index)) && gObj->MapNumber == 64) { gObjMoveGate(gObj->m_Index, 294); cLog.ConsoleOutPut(1, cLog.c_Blue ,cLog.t_Duel, "[Duel System][%s][%s] Spawn on duel map after duel is not allowed", gObj->AccountID, gObj->Name); } g_DuelSystem.UserDuelInfoReset(gObj); } #endif }
// ---------------------------------------------------------------------------------------- void CDoubleGoer::Clear() { for (int i=0;i<5+1;i++) { LPOBJ lpObj = &gObj[gDoubleGoer.UserIndex[i]]; // ---- if ( gObjIsConnected(lpObj) == true && lpObj->MapNumber == gDoubleGoer.EventMap ) { gObjMoveGate(gDoubleGoer.UserIndex[i],267); // ---- if ( gDoubleGoer.Success == 0 ) { gDoubleGoer.EventEnd(gDoubleGoer.UserIndex[i],0x01); } } } gDoubleGoer.BossStage = 0; gDoubleGoer.Running = 0; gDoubleGoer.EventMap = 0; gDoubleGoer.EventGate = 0; gDoubleGoer.EventX = 0; gDoubleGoer.EventY = 0; gDoubleGoer.UserCount = 0; gDoubleGoer.PartyActived = false; gDoubleGoer.UserIndexMaxHit[0] = 0; gDoubleGoer.UserIndexMaxHit[1] = 0; gDoubleGoer.UserIndexMaxHit[2] = 0; gDoubleGoer.BossStage = 0; gDoubleGoer.BossMonsterIndex[0] = -1; gDoubleGoer.BossMonsterIndex[1] = -1; gDoubleGoer.BossMonsterIndex[2] = -1; gDoubleGoer.BossMonsterPoss = 0; gDoubleGoer.MonsterPos = 0; gDoubleGoer.Success = 0; gDoubleGoer.MobNearY = 255; gDoubleGoer.MonsterPosIndex = -1; gDoubleGoer.GoldenChestIndex = -1; gDoubleGoer.BlockDoubleGoerEntrance(65); gDoubleGoer.BlockDoubleGoerEntrance(66); gDoubleGoer.BlockDoubleGoerEntrance(67); gDoubleGoer.BlockDoubleGoerEntrance(68); for (int i=0;i<3;i++) { if ( gDoubleGoer.BossMonsterIndex[i] != -1 ) { gObjDel(gDoubleGoer.BossMonsterIndex[i]); gDoubleGoer.BossMonsterIndex[i] = -1; } } gDoubleGoer.ChestIndex[0][0] = -1; gDoubleGoer.ChestIndex[0][1] = -1; gDoubleGoer.ChestIndex[0][2] = -1; gDoubleGoer.ChestIndex[1][0] = -1; gDoubleGoer.ChestIndex[1][1] = -1; gDoubleGoer.ChestIndex[1][2] = -1; gDoubleGoer.ChestIndex[2][0] = -1; gDoubleGoer.ChestIndex[2][1] = -1; gDoubleGoer.ChestIndex[2][2] = -1; gDoubleGoer.Timer = gDoubleGoer.OriginalTimer*60; gDoubleGoer.StandBy = 0; gDoubleGoer.StandByTimer = gDoubleGoer.OriginalStandByTimer*10; // ---- for (int i=0;i<5;i++) { gDoubleGoer.UserIndex[i] = 0; } // ---- gDoubleGoer.DeleteMonsters(); gDoubleGoer.DeleteChests(0,0); gDoubleGoer.DeleteChests(0,1); gDoubleGoer.DeleteChests(0,2); gDoubleGoer.DeleteChests(1,0); }
BOOL CMoveCommand::Move(LPOBJ lpObj, LPSTR mapname) { int m_number = -1; int overlevel = 0; int subMoney = 2000; int index = this->FindIndex(mapname); if ( g_bUseMoveMapBound == TRUE ) { //Cash shop //if ( g_CashItemPeriodSystem.CheckHaveItemPeriodSealEffect(lpObj) == FALSE ) //{ if ( !this->CheckMoveMapBound(index)) { return FALSE; } //} } int loc6 = this->m_MoveCommandData[index].Index; //season 3.0 add-on if ( loc6 == 24 ) //season 3.0 changed { if ( g_CastleSiegeSync.GetCastleState() == 7 ) { return FALSE; } if ( g_CastleSiegeSync.CheckCastleOwnerMember(lpObj->m_Index) == FALSE && g_CastleSiegeSync.CheckCastleOwnerUnionMember(lpObj->m_Index) == FALSE) { return FALSE; } } if(IT_MAP_RANGE(lpObj->MapNumber) != FALSE) //season 3.0 add-on { if(loc6 == 11 || loc6 == 12 || loc6 == 13 || loc6 == 23) { return FALSE; } } if ( index == -1 ) { return FALSE; } int NeedLevel = this->m_MoveCommandData[index].NeedLevel; int NeedZen = this->m_MoveCommandData[index].NeedZen; int GateNumber= this->m_MoveCommandData[index].GateNumber; if ( lpObj->Class == CLASS_DARKLORD || lpObj->Class == CLASS_MAGUMSA ) { if ( NeedLevel > 0 ) { if (GateNumber != 273) //season 3.0 add-on (Swamp of Calmmness) { NeedLevel = NeedLevel *2 / 3; } } } if ( GateNumber >= 0 ) { if ( NeedLevel <= lpObj->Level ) { if ( (lpObj->Money - NeedZen ) >= 0 ) { if ( gObjMoveGate(lpObj->m_Index, GateNumber ) != FALSE ) { lpObj->m_bPShopRedrawAbs = true; lpObj->Money -= NeedZen; LogAddTD("[%s][%s] Use [%s %s] Success : reduces money %d - %d", lpObj->AccountID, lpObj->Name, lMsg.Get(MSGGET(11, 185)), mapname, lpObj->Money, NeedLevel); GCMoneySend(lpObj->m_Index, lpObj->Money ); if(lpObj->MapNumber == MAP_INDEX_RAKLION_BOSS)//Season 4.5 addon { g_RaklionBattleUserMng.DeleteUserData(lpObj->m_Index); } return TRUE; } } else { ::GCServerMsgStringSend(lMsg.Get(MSGGET(4, 102)), lpObj->m_Index, 1); } } else { char szTemp[256]; wsprintf(szTemp, lMsg.Get(MSGGET(4, 93)), NeedLevel); ::GCServerMsgStringSend(szTemp, lpObj->m_Index, 1); } } LogAddTD("[%s][%s] Use [%s %s] Fail GateNumber = %d", lpObj->AccountID, lpObj->Name, lMsg.Get(MSGGET(11, 185)), mapname, GateNumber); return FALSE; }
// ---------------------------------------------------------------------------------------- void CDoubleGoer::Run() { if ( gDoubleGoer.Enabled == 0 ) { return; } // ---- if ( gDoubleGoer.Running == 0 ) { return; } // ---- for (int i=0;i<5;i++) { if ( gDoubleGoer.UserIndex[i] != 0 ) { LPOBJ lpObj = &gObj[gDoubleGoer.UserIndex[i]]; if ( gObjIsConnected(lpObj) == false ) { gDoubleGoer.UserIndex[i] = 0; gDoubleGoer.UserCount--; } // ---- else if ( gObjIsConnected(lpObj) == true && lpObj->MapNumber != gDoubleGoer.EventMap && gDoubleGoer.StandBy == 0 ) { if ( gDoubleGoer.Success == 1 ) { gDoubleGoer.UserIndex[i] = 0; gDoubleGoer.UserCount--; } else { gDoubleGoer.EventEnd(gDoubleGoer.UserIndex[i],0x01); gDoubleGoer.UserIndex[i] = 0; gDoubleGoer.UserCount--; } } else if ( gDoubleGoer.PartyActived == true && lpObj->PartyNumber == -1 ) { gObjMoveGate(gDoubleGoer.UserIndex[i],267); gDoubleGoer.UserIndex[i] = 0; gDoubleGoer.UserCount--; if ( gDoubleGoer.Success == 0 ) { gDoubleGoer.EventEnd(gDoubleGoer.UserIndex[i],0x01); } } } } if ( gDoubleGoer.Running == 1 && gDoubleGoer.UserCount == 0 ) { gDoubleGoer.Clear(); return; } // ---- for(int n=0;n<23;n++) { for (int i=0;i<5;i++) { if ( gDoubleGoer.UserIndex[i] != 0 ) { if ( (gObj[gDoubleGoer.UserIndex[i]].Y > gDoubleGoer.BossStartY-(n*gDoubleGoer.CalcDistanceY) ) && (gObj[gDoubleGoer.UserIndex[i]].Y <= (gDoubleGoer.BossStartY+gDoubleGoer.CalcDistanceY)-(n*gDoubleGoer.CalcDistanceY) ) ) { gDoubleGoer.UserPos[i] = n; } } } if ( gDoubleGoer.BossMonsterIndex[2] != -1 ) { if ( (gObj[gDoubleGoer.BossMonsterIndex[2]].Y >= gDoubleGoer.BossStartY-(n*gDoubleGoer.CalcDistanceY) ) && (gObj[gDoubleGoer.BossMonsterIndex[2]].Y < (gDoubleGoer.BossStartY+gDoubleGoer.CalcDistanceY)-(n*gDoubleGoer.CalcDistanceY) ) ) { gDoubleGoer.BossMonsterPoss = n; } } else { gDoubleGoer.BossMonsterPoss = 0; } for (int i=0;i<255;i++) { if ( gDoubleGoer.MonstersAddIndex[i] != -1 ) { if ( (gObj[gDoubleGoer.MonstersAddIndex[i]].Y <= ::DoublePortalCoords[gDoubleGoer.EventMap-65].btEndY && gObj[gDoubleGoer.MonstersAddIndex[i]].Y >= ::DoublePortalCoords[gDoubleGoer.EventMap-65].btStartY) && (gObj[gDoubleGoer.MonstersAddIndex[i]].X <= ::DoublePortalCoords[gDoubleGoer.EventMap-65].btEndX && gObj[gDoubleGoer.MonstersAddIndex[i]].X >= ::DoublePortalCoords[gDoubleGoer.EventMap-65].btStartX)) { gDoubleGoer.MonsterCount++; gObjDel(gDoubleGoer.MonstersAddIndex[i]); gDoubleGoer.MonstersAddIndex[i] = -1; continue; } // ---- if ( gObj[gDoubleGoer.MonstersAddIndex[i]].Life > 0.0f ) { if ( ( gObj[gDoubleGoer.MonstersAddIndex[i]].Y > gDoubleGoer.BossStartY-(n*gDoubleGoer.CalcDistanceY) ) && (gObj[gDoubleGoer.MonstersAddIndex[i]].Y <= (gDoubleGoer.BossStartY+gDoubleGoer.CalcDistanceY)-(n*gDoubleGoer.CalcDistanceY) ) ) { } } else if ( gDoubleGoer.MonstersAddIndex[i] == gDoubleGoer.MonsterPosIndex ) { } } } } }
BOOL CIllusionTempleEvent::EnterIllusionTemple(int aIndex, BYTE btTempleIndex, BYTE btItemPos) { if( !g_bIllusionTempleEvent ) { return FALSE; } // ---- if(!CHECK_LIMIT(btTempleIndex, MAX_ILLUSIONTEMPLE_TEMPLE_COUNT)) { return FALSE; } LPOBJECTSTRUCT lpObj = (LPOBJECTSTRUCT)&gObj[aIndex]; PMSG_RESULT_ENTER_ILLUSION_TEMPLE pResult; PHeadSubSetB((LPBYTE)&pResult, 0xBF, 0x00, sizeof(pResult)); pResult.Result = 0; if( lpObj->Type != OBJ_USER || lpObj->Connected <= 2 ) { return FALSE; } if( lpObj->m_IfState.use && lpObj->m_IfState.type != 12 ) { return FALSE; } if( lpObj->m_bPShopOpen == true ) { CGPShopReqClose(lpObj->m_Index); } BOOL PKFlag = FALSE; if(lpObj->PartyNumber >= 0) { if( (gParty.GetPKPartyPenalty(lpObj->PartyNumber)) >= 5) { PKFlag = TRUE; } } else if( lpObj->m_PK_Level >= 4 ) { PKFlag = TRUE; } if( PKFlag == TRUE ) { pResult.Result = 7; DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); return FALSE; } if( CheckWearingMOPH(aIndex) ) { pResult.Result = 8; DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); return FALSE; } if( m_cIllusionTempleProc[btTempleIndex].GetIllusionTempleState() != 0 || !m_cIllusionTempleProc[btTempleIndex].GetEntrance() ) { pResult.Result = 2; DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); return FALSE; } int iITEM_LEVEL; DWORD dwITEM_SERIAL; if(gObj[aIndex].pInventory[btItemPos].IsItem() == TRUE) { if(gObj[aIndex].pInventory[btItemPos].m_Type == (ITEM_HELPER+51)) { iITEM_LEVEL = gObj[aIndex].pInventory[btItemPos].m_Level; dwITEM_SERIAL = gObj[aIndex].pInventory[btItemPos].m_Number; if( !CHECK_LIMIT( iITEM_LEVEL-1, MAX_ILLUSIONTEMPLE_TEMPLE_COUNT ) && gObj[aIndex].pInventory[btItemPos].m_Durability != 1.0f) { pResult.Result = 1; DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); return FALSE; } } else if(gObj[aIndex].pInventory[btItemPos].m_Type == (ITEM_HELPER+61)) { dwITEM_SERIAL = gObj[aIndex].pInventory[btItemPos].m_Number; iITEM_LEVEL = CheckCanEnterLevel(aIndex); if(iITEM_LEVEL <= 0) { pResult.Result = 1; DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); return FALSE; } } else { pResult.Result = 1; DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); return FALSE; } } else { pResult.Result = 1; DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); return FALSE; } #pragma message("#### Enable me after time ####") //if( GEReqIllusionTempleEnterCountCheck(aIndex, btTempleIndex, btItemPos, iITEM_LEVEL) ) //{ // LogAddC(2, "[DEBUG] [IT] Enter R12"); // return TRUE; //} if( !CheckEnterLevel(aIndex, iITEM_LEVEL) ) { pResult.Result = 3; DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); return FALSE; } m_cIllusionTempleProc[iITEM_LEVEL-1].CheckUsersOnConnect(); BOOL bRet = m_cIllusionTempleProc[iITEM_LEVEL-1].EnterUserIllusionTemple(aIndex, btTempleIndex, btItemPos); if(bRet == TRUE) { if(lpObj->PartyNumber >= 0) { PMSG_PARTYDELUSER pMsg; int pindex = gParty.GetIndex(lpObj->PartyNumber, lpObj->m_Index, lpObj->DBNumber); if(pindex >= 0) { pMsg.Number = pindex; CGPartyDelUser(&pMsg, lpObj->m_Index); } } if( lpObj->pInventory[btItemPos].m_Type == (ITEM_HELPER+51) ) { lpObj->pInventory[btItemPos].m_Durability = 0; GCItemDurSend(lpObj->m_Index, btItemPos, lpObj->pInventory[btItemPos].m_Durability, 0); } else if(lpObj->pInventory[btItemPos].m_Type == (ITEM_HELPER+61) && lpObj->pInventory[btItemPos].m_Durability > 0.0f) { lpObj->pInventory[btItemPos].m_Durability -= 1.0f; GCItemDurSend(lpObj->m_Index, btItemPos, lpObj->pInventory[btItemPos].m_Durability, 0); } #ifdef OPT LogAddTD("[Illusion Temple] (%d) EnterUser: (%s)(%s) class:%d (Serial:%u). PCRoom:%d", iITEM_LEVEL, lpObj->AccountID, lpObj->Name, lpObj->DbClass, lpObj->pInventory[btItemPos].m_Number, lpObj->m_iPcBangRoom); #else LogAddTD("[Illusion Temple] (%d) EnterUser: (%s)(%s) class:%d (Serial:%u)", iITEM_LEVEL, lpObj->AccountID, lpObj->Name, lpObj->DbClass, lpObj->pInventory[btItemPos].m_Number); #endif DataSend(aIndex,(LPBYTE)&pResult,pResult.h.size); gObjMoveGate(lpObj->m_Index, iITEM_LEVEL+141); } m_cIllusionTempleProc[btTempleIndex].SendIllusionTempleState(0, lpObj->m_Index); SendIllusionTempleUserCount(); #if(TESTSERVER==1) GCServerMsgStringSend("CIllusionTempleEvent::EnterIllusionTemple", lpObj->m_Index, 0); #endif return FALSE; }
void CHacktoolBlockEx::SetUseForceMove2Town(LPOBJ lpObj) { if( BC_MAP_RANGE(lpObj->MapNumber) ) { int iBridgeIndex = g_BloodCastle.GetBridgeIndexByMapNum(lpObj->MapNumber); // ---- if( g_BloodCastle.GetCurrentState(iBridgeIndex) == BC_STATE_PLAYING ) { g_BloodCastle.SearchUserDropQuestItem(lpObj->m_Index); } else { g_BloodCastle.SearchUserDeleteQuestItem(lpObj->m_Index); } } // ---- if( IT_MAP_RANGE(lpObj->MapNumber) ) { g_IllusionTempleEvent.DropRelicsItem(lpObj->MapNumber, lpObj->m_Index); } // ---- if( (lpObj->m_IfState.use) != 0 ) { if( lpObj->m_IfState.type == 3 ) { lpObj->TargetShopNumber = -1; lpObj->m_IfState.type = 0; lpObj->m_IfState.use = 0; } } // ---- if( lpObj->MapNumber == MAP_INDEX_DEVIAS ) { gObjMoveGate(lpObj->m_Index, 22); } else if( lpObj->MapNumber == MAP_INDEX_NORIA ) { gObjMoveGate(lpObj->m_Index, 27); } else if( lpObj->MapNumber == MAP_INDEX_LOSTTOWER ) { gObjMoveGate(lpObj->m_Index, 42); } else if( lpObj->MapNumber == MAP_INDEX_ATHLANSE ) { gObjMoveGate(lpObj->m_Index, 49); } else if( lpObj->MapNumber == MAP_INDEX_TARKAN ) { gObjMoveGate(lpObj->m_Index, 57); } else if( BC_MAP_RANGE(lpObj->MapNumber) ) { gObjMoveGate(lpObj->m_Index, 22); } else if( CC_MAP_RANGE(lpObj->MapNumber) ) { gObjMoveGate(lpObj->m_Index, 22); } else if( KALIMA_MAP_RANGE(lpObj->MapNumber) ) { gObjMoveGate(lpObj->m_Index, 22); } else if( CC_MAP_RANGE(lpObj->MapNumber) ) { gObjMoveGate(lpObj->m_Index, 22); } else if( lpObj->MapNumber == MAP_INDEX_AIDA ) { gObjMoveGate(lpObj->m_Index, 27); } else if( lpObj->MapNumber == MAP_INDEX_CRYWOLF_FIRSTZONE ) { gObjMoveGate(lpObj->m_Index, 27); } else if( lpObj->MapNumber == MAP_INDEX_ELBELAND ) { gObjMoveGate(lpObj->m_Index, 267); } else if( lpObj->MapNumber == MAP_INDEX_SWAMP_OF_CALMNESS ) { gObjMoveGate(lpObj->m_Index, 273); } else if( lpObj->MapNumber == MAP_INDEX_RAKLION_FIELD ) { gObjMoveGate(lpObj->m_Index, 286); } else if( g_NewPVP.IsVulcanusMap(lpObj->MapNumber) ) { gObjMoveGate(lpObj->m_Index, 294); } else if( g_NewPVP.IsPKFieldMap(lpObj->MapNumber) ) { g_NewPVP.Reset(*lpObj); gObjMoveGate(lpObj->m_Index, 294); } else { gObjMoveGate(lpObj->m_Index, 17); } }
void cTvTEvent::TickTime() { if(!this->Enable)return; SYSTEMTIME t; GetLocalTime(&t); if(this->Waiting == true) { this->WaitingTick++; if(this->WaitingTick == this->WaitingTime) { if(this->TotalPlayer >= 2) { this->DivisionTeam(); MessaageAllGlobal("[TvT Event] Start"); MessaageAllGlobal("[TvT Event] Total Player: %d",this->TotalPlayer); this->Start = true; } else { MessaageAllGlobal("[TvT Event] End"); for(int n=OBJ_STARTUSERINDEX;n<OBJMAX;n++) { LPOBJ sObj = &gObj[n]; if(sObj->Connected != PLAYER_PLAYING) continue; if(this->Player[n].tEvent == true) { this->Player[n].tEvent = false; gObjMoveGate(n,17); //Lorencia if(this->DisplayCommands == 1) { gObj[n].m_Change = -1; gObjViewportListProtocolCreate(&gObj[n]); } this->Reward(n); this->RestoreUser(n); } } this->Start = false; this->TotalPlayer = 0; this->ScoreBlue = 0; this->ScoreRed = 0; } this->Waiting = false; this->WaitingTick = 0; } return; } if(this->Start == true) { this->StartTick++; if(this->StartTick == this->EventTime) { MessaageAllGlobal("[TvT Event] End"); if(this->ScoreBlue > this->ScoreRed) { MessaageAllGlobal("[TvT Event] Win Blue Team"); MessaageAllGlobal("[TvT Event] Blue: %d Vs Red: %d",this->ScoreBlue,this->ScoreRed); } else if(this->ScoreRed > ScoreBlue) { MessaageAllGlobal("[TvT Event] Win Red Team"); MessaageAllGlobal("[TvT Event] Red: %d Vs Blue: %d",this->ScoreRed,this->ScoreBlue); } else { MessaageAllGlobal("[TvT Event] Dead heat"); } for(int n=OBJ_STARTUSERINDEX;n<OBJMAX;n++) { LPOBJ sObj = &gObj[n]; if(sObj->Connected != PLAYER_PLAYING) continue; if(this->Player[n].tEvent == true) { this->Player[n].tEvent = false; gObjMoveGate(n,17); //Lorencia if(this->DisplayCommands == 1) { gObj[n].m_Change = -1; gObjViewportListProtocolCreate(&gObj[n]); } this->Reward(n); this->RestoreUser(n); } } this->Start = false; this->TotalPlayer = 0; this->ScoreBlue = 0; this->ScoreRed = 0; this->StartTick = 0; } return; } if(t.wSecond == 00) { for(int i=0;i<this->Count;i++) { if(t.wHour == this->T[i].H && t.wMinute == this->T[i].M) { MessaageAllGlobal("[TvT Event] Starts in %d minute",(this->WaitingTime/60)); this->Waiting = true; return; } } } }
void cDuelSystem::RoomReset(short iRoom, bool dontMove, bool dontSendEnd) { if(this->g_DuelRooms[iRoom].szlpObjOne != NULL) // Player 1 { if(Utilits.gObjIsConnected(this->g_DuelRooms[iRoom].szlpObjOne->m_Index)) { if(dontSendEnd == false) { this->SendEndDuel(this->g_DuelRooms[iRoom].szlpObjOne); } if(this->g_DuelRooms[iRoom].szlpObjOne->MapNumber == 0x40) { if(dontMove == false) { gObjMoveGate(this->g_DuelRooms[iRoom].szlpObjOne->m_Index, DuelSystem.Config.DuelGate); } } } this->UserDuelInfoReset(this->g_DuelRooms[iRoom].szlpObjOne); } if(this->g_DuelRooms[iRoom].szlpObjTy != NULL) // Player 2 { if(Utilits.gObjIsConnected(this->g_DuelRooms[iRoom].szlpObjTy->m_Index)) { if(dontSendEnd == false) { this->SendEndDuel(this->g_DuelRooms[iRoom].szlpObjTy); } if(this->g_DuelRooms[iRoom].szlpObjTy->MapNumber == 0x40) { if(dontMove == false) { gObjMoveGate(this->g_DuelRooms[iRoom].szlpObjTy->m_Index, DuelSystem.Config.DuelGate); } } } this->UserDuelInfoReset(this->g_DuelRooms[iRoom].szlpObjTy); } for(short i = 0; i < MAX_DUEL_SEPARATORS; ++i) { if(this->g_DuelRooms[iRoom].szSeparators[i] != NULL) { this->SendEndDuel(this->g_DuelRooms[iRoom].szSeparators[i]); AddBuff(this->g_DuelRooms[iRoom].szSeparators[i], 18, 0, 0, 0, 0, 1); gObjViewportListProtocolCreate(this->g_DuelRooms[iRoom].szSeparators[i]); GCStateInfoSendg(this->g_DuelRooms[iRoom].szSeparators[i], 0, 98); gObjMoveGate(this->g_DuelRooms[iRoom].szSeparators[i]->m_Index, DuelSystem.Config.DuelGate); } this->g_DuelRooms[iRoom].szSeparators[i] = NULL; } this->g_DuelRooms[iRoom].szlpObjOne = NULL; this->g_DuelRooms[iRoom].szPointsOne = 0; this->g_DuelRooms[iRoom].szlpObjTy = NULL; this->g_DuelRooms[iRoom].szPointsTy = 0; this->g_DuelRooms[iRoom].RoomFree = TRUE; this->g_DuelRooms[iRoom].DuelWaiting = FALSE; this->g_DuelRooms[iRoom].szWinner = FALSE; this->g_DuelRooms[iRoom].dwTicketCount= 0; this->g_DuelRooms[iRoom].dwStartTime = 0; if(Config.Logging) { Log.ConsoleOutPut(1, c_Blue, t_Duel,"[Duel System] Room [%d] Has Restarted", iRoom +1); } }
//00416F70 - identical void CKalimaGate::KalimaGateAct2(int iIndex) { LPOBJ lpObj = NULL; LPOBJ lpObjCallOwner = NULL; if ( OBJMAX_RANGE(iIndex) == FALSE ) return; if ( gObj[iIndex].Live == 0 ) return; if ( !gObjIsConnected(gObj[iIndex].m_RecallMon ) ) { LogAddTD("[Kalima] Kalima Gate Vanished (NextMap) - Summoner Vanished (SummonIndex:%d, EnterCount:%d)", iIndex, gObj[iIndex].m_cKalimaGateEnterCount); GCDiePlayerSend(&gObj[iIndex], iIndex, 0, 0); gObjDel(iIndex); gObjCharZeroSet(iIndex); return; } lpObj = &gObj[iIndex]; lpObjCallOwner = &gObj[lpObj->m_RecallMon]; if ( gObj[iIndex].m_cKalimaGateEnterCount >= MAX_KALIMA_ENTER ) { lpObjCallOwner->AccountID[MAX_ACCOUNT_LEN]=0; lpObjCallOwner->Name[MAX_ACCOUNT_LEN]=0; LogAddTD("[Kalima] [%s][%s] Kalima Gate Vanished - Enter Count Over (SummonIndex:%d, EnterCount:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, iIndex, gObj[iIndex].m_cKalimaGateEnterCount); this->DeleteKalimaGate(iIndex, gObj[iIndex].m_RecallMon); return; } DWORD dwTickCount = GetTickCount(); if ( dwTickCount > (lpObj->RegenTime+60000) ) { lpObjCallOwner->AccountID[MAX_ACCOUNT_LEN]=0; lpObjCallOwner->Name[MAX_ACCOUNT_LEN]=0; LogAddTD("[Kalima] [%s][%s] Kalima Gate Vanished (NextMap) - Time Out (SummonIndex:%d, EnterCount:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, iIndex, gObj[iIndex].m_cKalimaGateEnterCount); this->DeleteKalimaGate(lpObj->m_Index, lpObjCallOwner->m_Index); return; } if ( lpObj->VPCount < 1 ) return; if ( lpObj->MapNumber < MAP_INDEX_KALIMA1 || lpObj->MapNumber > MAP_INDEX_KALIMA6-1 ) return; int tObjNum = -1; for ( int i=0;i<MAX_VIEWPORT_MONSTER;i++) { tObjNum = lpObj->VpPlayer[i].number; if ( tObjNum >= 0 ) { if ( gObj[tObjNum].Type == OBJ_USER ) { if ( gObj[tObjNum].Live ) { if ( abs(lpObj->Y - gObj[tObjNum].Y) < 2 ) { if ( abs(lpObj->X - gObj[tObjNum].X) < 2 ) { if ( lpObj->m_RecallMon == tObjNum || (gObj[tObjNum].PartyNumber != -1 && lpObjCallOwner->PartyNumber == gObj[tObjNum].PartyNumber )) { int iMoveMapLevel = lpObj->MapNumber - MAP_INDEX_KALIMA1+1; // #error "Deatwway - remove the -1 int iGateNumber = g_iKalimaGateGateIndex[iMoveMapLevel]; if ( !gObjMoveGate(tObjNum, iGateNumber)) { LogAddTD("[Kalima] [%s][%s] - [%s][%s] move fail (MapNumber:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, gObj[tObjNum].AccountID, gObj[tObjNum].Name, lpObj->MapNumber); } else { LogAddTD("[Kalima] [%s][%s] - [%s][%s] Transported by Kalima Gate (NextMap) (SummonIndex:%d, GateNo.:%d, MapNumber:%d)", lpObjCallOwner->AccountID, lpObjCallOwner->Name, gObj[tObjNum].AccountID, gObj[tObjNum].Name, iIndex, iMoveMapLevel+1, lpObj->MapNumber); gObj[iIndex].m_cKalimaGateEnterCount++; if ( gObj[iIndex].m_cKalimaGateEnterCount >= MAX_KALIMA_ENTER ) break; } } } } } } } } }
void CKanturuEntranceNPC::NotifyResultEnterKanturuBossMap(int iIndex) { if ( !gObjIsConnected(iIndex)) { return; } LPOBJ lpObj = &gObj[iIndex]; BOOL bMoveGateSuccess = FALSE; int iResult = g_Kanturu.CheckEnterKanturu(iIndex); if ( iResult == 0 ) { int iCurrentState = g_Kanturu.GetKanturuState(); if ( iCurrentState == KANTURU_STATE_BATTLE_OF_MAYA ) { bMoveGateSuccess = gObjMoveGate(iIndex, 133); if ( bMoveGateSuccess ==TRUE ) { g_KanturuBattleUserMng.AddUserData(iIndex); LogAddTD("[Kanturu][BattleUser] Add User [%s][%s] Current Battle User:%d State:[%d-%d] (CharInfoSave : Class=%d, Level=%d, LvPoint=%d, Exp=%u, Str=%d, Dex=%d, Vit=%d, Energy=%d, LeaderShip=%d, Map=%d, Pk=%d", gObj[iIndex].AccountID, gObj[iIndex].Name, g_KanturuBattleUserMng.GetUserCount(), g_Kanturu.GetKanturuState(), g_Kanturu.GetKanturuDetailState(), gObj[iIndex].Class, gObj[iIndex].Level, gObj[iIndex].LevelUpPoint, gObj[iIndex].Experience, gObj[iIndex].Strength, gObj[iIndex].Dexterity, gObj[iIndex].Vitality, gObj[iIndex].Energy, gObj[iIndex].Leadership, gObj[iIndex].MapNumber, gObj[iIndex].m_PK_Level); KANTURU_UTIL.NotifyKanturuCurrentState(iIndex, g_Kanturu.GetKanturuState(),g_Kanturu.GetKanturuDetailState()); gObj[iIndex].m_bKanturuEntranceByNPC = 1; } } else if ( iCurrentState == KANTURU_STATE_TOWER_OF_REFINEMENT ) { bMoveGateSuccess = gObjMoveGate(iIndex, 135); KANTURU_UTIL.NotifyKanturuCurrentState(iIndex, g_Kanturu.GetKanturuState(),g_Kanturu.GetKanturuDetailState()); gObj[iIndex].m_bKanturuEntranceByNPC = 1; } else { LogAddTD("[Kanturu][BossMapMove] Error - State(%d) Character[%s][%s]", iCurrentState, lpObj->AccountID, lpObj->Name); } } else { KANTURU_UTIL.NotifyKanturuEntranceReqResult(iIndex, iResult); LogAddTD("[Kanturu][BossMapMove] Fail - Result(%d) Character[%s][%s]", iResult, lpObj->AccountID, lpObj->Name); gObj[iIndex].m_bKanturuEntranceByNPC = 0; } }
void cDuelSystem::RecvDuelAnswer(LPOBJ lpObj, PMSG_DUEL_ANSWER_START* lpMsg) { int iDuelIndex = -1; int aIndex = lpObj->m_Index; int iDuelRoom = AddTab[aIndex].DUEL_Room; PMSG_DUEL_START pMsgSend; pMsgSend.h.c = 0xC1; pMsgSend.h.headcode = 0xAA; pMsgSend.h.subcode = 0x01; pMsgSend.bDuelStart = 0; pMsgSend.h.size = sizeof(pMsgSend); LPOBJ gObjg = (LPOBJ)OBJECT_POINTER(aIndex); if(iDuelRoom < 0 || iDuelRoom > MAX_DUEL_ROOMS - 1) { return; } if(gObjg->CloseType != -1) { return; } iDuelIndex = MAKE_NUMBERW(lpMsg->NumberH, lpMsg->NumberL); // aIndex Packet C1 XX AA OBJECTSTRUCT *gObjs = (OBJECTSTRUCT*)OBJECT_POINTER(iDuelIndex); if(iDuelIndex <= 7999 || lpObj->m_Index <= 7999) { return; } if(OBJECT_MAXRANGE(iDuelIndex)) { if(!Utilits.gObjIsConnected(iDuelIndex)) { return; } if(gObjs->Type == OBJECT_MONSTER) { return; } if(gObjs->CloseCount >= 0) { return; } if(lpMsg->bDuelOK) { if ( (gObjs->MapNumber >= 11 && gObjs->MapNumber <= 17) || gObjs->MapNumber == 52 || (gObjs->MapNumber >= 18 && gObjs->MapNumber <= 23) || gObjs->MapNumber == 53 || gObjs->MapNumber == 9 || gObjs->MapNumber == 32 || (gObjs->MapNumber >= 45 && gObjs->MapNumber <= 50) ) { GCServerMsgStringSend("Duels are not allowed in event maps.", lpObj->m_Index, 1); this->RoomReset(iDuelRoom, true, true); memcpy(pMsgSend.szName, lpObj->Name, sizeof(pMsgSend.szName)); DataSend(iDuelIndex, (LPBYTE)&pMsgSend, pMsgSend.h.size); return; } } if(OBJECT_MAXRANGE(lpObj->m_iDuelUser)) { GCServerMsgStringSend("You are already in a Duel.", lpObj->m_Index, 1); GCServerMsgStringSend("In order to issue a Duel, cancel the previous request.", lpObj->m_Index, 1); this->RoomReset(iDuelRoom, true, true); memcpy(pMsgSend.szName, lpObj->Name, sizeof(pMsgSend.szName)); DataSend(iDuelIndex, (LPBYTE)&pMsgSend, pMsgSend.h.size); return; } if(OBJECT_MAXRANGE(lpObj->m_iDuelUserReserved)) { GCServerMsgStringSend("You are already issuing a Duel challenge.", lpObj->m_Index, 1); this->RoomReset(iDuelRoom, true, true); memcpy(pMsgSend.szName, lpObj->Name, sizeof(pMsgSend.szName)); DataSend(iDuelIndex, (LPBYTE)&pMsgSend, pMsgSend.h.size); return; } if(gObjs->m_iDuelUserReserved == lpObj->m_Index) { char szDuelName[MAX_ACCOUNT_LEN + 1] = {0}; char szDuelName2[MAX_ACCOUNT_LEN + 1] = {0}; memcpy(szDuelName, gObjs->Name, MAX_ACCOUNT_LEN); szDuelName[MAX_ACCOUNT_LEN] = 0; memcpy(szDuelName2, lpMsg->szName, MAX_ACCOUNT_LEN); szDuelName2[MAX_ACCOUNT_LEN] = 0; if(!strcmp(szDuelName, szDuelName2)) { if(lpMsg->bDuelOK == false) { this->RoomReset(iDuelRoom, true, true); pMsgSend.bDuelStart = 0x0F; memcpy(pMsgSend.szName, lpObj->Name, sizeof(pMsgSend.szName)); DataSend(iDuelIndex, (LPBYTE)&pMsgSend, pMsgSend.h.size); } else if (lpMsg->bDuelOK == true) { if(gObjMoveGate(lpObj->m_Index, g_DuelGates[iDuelRoom].Gate01) == false) { this->RoomReset(iDuelRoom, true, true); return; } if(gObjMoveGate(iDuelIndex, g_DuelGates[iDuelRoom].Gate02) == false) { this->RoomReset(iDuelRoom, true, true); return; } gObjs->m_iDuelUserReserved = -1; gObjs->m_btDuelScore = 0; gObjs->m_iDuelUser = lpObj->m_Index; gObjs->m_iDuelTickCount = GetTickCount(); this->g_DuelRooms[iDuelRoom].dwStartTime = GetTickCount(); this->g_DuelRooms[iDuelRoom].dwTicketCount = GetTickCount() + (MAX_DUEL_TIME * 60000); lpObj->m_iDuelUserRequested = -1; lpObj->m_iDuelUserReserved = -1; lpObj->m_btDuelScore = 0; lpObj->m_iDuelUser = iDuelIndex; lpObj->m_iDuelTickCount = GetTickCount(); this->g_DuelRooms[iDuelRoom].RoomFree = FALSE; this->g_DuelRooms[iDuelRoom].DuelWaiting = FALSE; this->g_DuelRooms[iDuelRoom].szWinner = FALSE; pMsgSend.bDuelStart = 0; pMsgSend.NumberH = SET_NUMBERH(iDuelIndex); pMsgSend.NumberL = SET_NUMBERL(iDuelIndex); memcpy(pMsgSend.szName, szDuelName, sizeof(pMsgSend.szName)); DataSend(lpObj->m_Index, (LPBYTE)&pMsgSend, pMsgSend.h.size); pMsgSend.NumberH = SET_NUMBERH(lpObj->m_Index); pMsgSend.NumberL = SET_NUMBERL(lpObj->m_Index); memcpy(pMsgSend.szName, lpObj->Name, sizeof(pMsgSend.szName)); DataSend(iDuelIndex, (LPBYTE)&pMsgSend, pMsgSend.h.size); this->UpdateDuelScore(iDuelRoom); Chat.MessageAllLog(0, 0, c_Cyan, t_Duel, lpObj, "Duelo %s VS %s na sala %d!", lpObj->Name, gObjs->Name, iDuelRoom + 1); Log.ConsoleOutPut(1, c_Blue,t_Duel,"[Duel System] Duel Started [%s][%s] VS [%s][%s] on Room[%d]",lpObj->AccountID, lpObj->Name, gObjs->AccountID, gObjs->Name, iDuelRoom + 1); } } else { this->RoomReset(iDuelRoom); DataSend(iDuelIndex, (LPBYTE)&pMsgSend, pMsgSend.h.size); return; } } else { this->RoomReset(iDuelRoom); DataSend(iDuelIndex, (LPBYTE)&pMsgSend, pMsgSend.h.size); return; } } }