void WaypointMovementGenerator<Creature>::StartMoveNow(Creature& creature)
{
    i_nextMoveTime.Reset(0);
    creature.clearUnitState(UNIT_STAT_WAYPOINT_PAUSED);
    StartMove(creature);
}
Пример #2
0
        void UpdateAI(const uint32 diff)
        {
            npc_escortAI::UpdateAI(diff);

            if (PlayerGUID)
            {
                Player* AuraPlayer = Unit::GetPlayer(*me,PlayerGUID);

                if (!AuraPlayer)
                {
                    me->DisappearAndDie();
                    return;
                }
                else
                {
                    if (AuraPlayer->isDead())
                    {
                        AuraPlayer->FailQuest(QUEST_A_FALL_FROM_GRACE);
                        me->DisappearAndDie();
                        return;
                    }

                    if (EndSequence)
                    {
                        if (EndSequenceTimer <= diff)
                        {
                            EndSequenceTimer = 12000;
                            if (EndSayCount == 6)
                            {
                                me->GetMotionMaster()->MoveJump(HighAbbotLandgrenJumpPos[0][0][0], HighAbbotLandgrenJumpPos[0][0][1], HighAbbotLandgrenJumpPos[0][0][2], 0.5f, 8.0f);
                                EndSequenceTimer = 2000;
                            }
                            if (EndSayCount == 7)
                            {
                                me->MonsterSay(HighAbbotText[6], LANG_UNIVERSAL, 0);
                                EndSequenceTimer = 2000;
                            }
                            if (EndSayCount == 8)
                            {
                                AuraPlayer->KilledMonsterCredit(27444, me->GetGUID());
                                if (AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE))
                                    AuraPlayer->RemoveAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE);
                                if (AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE))
                                    AuraPlayer->RemoveAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE);
                                EndSequence = false;
                            }

                            if (EndSayCount < 6)
                                me->MonsterSay(HighAbbotText[EndSayCount], LANG_UNIVERSAL, PlayerGUID);

                            EndSayCount++;
                        } else
                            EndSequenceTimer -= diff;
                    }

                    if (!EventStarted && me->GetEntry() == NPC_HIGH_ABBOT_LANDGREN_ESCORTEE_ENTRY)
                    {
                        Start(false, false, PlayerGUID, 0, false);
                        EventStarted = true;
                    }

                    if (CheckPlayerDist)
                        if (AuraPlayer->GetDistance(2827.796f, -420.191f, 118.196f) < 4)
                            StartMove();

                    if (AuraCheckTimer <= diff) {
                        if (AuraPlayer && AuraPlayer->GetQuestStatus(QUEST_A_FALL_FROM_GRACE) == QUEST_STATUS_INCOMPLETE && AuraPlayer->getQuestStatusMap()[QUEST_A_FALL_FROM_GRACE].m_creatureOrGOcount[0] == 1 && !AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE) && !AuraPlayer->HasAura(SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE)) {
                            switch(AuraPlayer->getGender())
                            {
                            case GENDER_FEMALE:
                                AuraPlayer->CastSpell(AuraPlayer, SPELL_SCARLET_RAVEN_PRIEST_IMAGE_FEMALE, false);
                                break;
                            case GENDER_MALE:
                                AuraPlayer->CastSpell(AuraPlayer, SPELL_SCARLET_RAVEN_PRIEST_IMAGE_MALE, false);
                                break;
                            }
                        }
                        AuraCheckTimer = 300;
                    } else
                        AuraCheckTimer -= diff;

                    if (me->GetEntry() != NPC_HIGH_ABBOT_LANDGREN_ESCORTEE_ENTRY)
                    {
                        if (BodyGuardStart && AuraPlayer->GetQuestStatus(QUEST_A_FALL_FROM_GRACE) == QUEST_STATUS_INCOMPLETE && AuraPlayer->getQuestStatusMap()[QUEST_A_FALL_FROM_GRACE].m_creatureOrGOcount[0] == 1) {
                            if (Creature* tmp = me->FindNearestCreature(NPC_DEVOUT_BODYGUARD, Range, true))
                            {
                                if (BodyGuardMoveTimer <= diff)
                                {
                                    CAST_AI(npc_devout_bodyguard::npc_devout_bodyguardAI, tmp->AI())->StartMove();
                                    BodyGuardMoveTimer = 6000;
                                    Range = 4.0f;
                                    if (GuardCount == 1)
                                        BodyGuardStart = false;
                                    GuardCount++;
                                } else
                                    BodyGuardMoveTimer -= diff;
                            }
                        }
                    }
                }
            }
        }
void TaskVidageChateau(void)
{
    switch (robotState.taskState)
    {
        case T_VC_INIT:
            //On dit au robot d'aller à la position initiale
            allerRetourCounter=0;
            StartMove(T_VC_INIT_EN_COURS,380,taskVidageChateau.startingPosY,ALIGNED_WITH_MOVE);
            PWMSetSpeedConsigne(VITESSE_ROULEAU_AVALE, MOTEUR_ROULEAU);
            break;
        case T_VC_INIT_EN_COURS:
            IsCurrentMoveFinishedGoToState(T_VC_AVANCE_0,4000);
                robotState.AligneAvantVersDirectionMouvement = 0;
            break;

        case T_VC_AVANCE_0:
            if (allerRetourCounter < 2)
            {
                allerRetourCounter++;
                StartRotate(T_VC_AVANCE_0_EN_COURS,90);
                PWMSetSpeedConsigne(VITESSE_ROULEAU_ARRET, MOTEUR_ROULEAU); //On recrache
            }
            else
            {
                robotState.taskState = T_VC_FIN;
            }
            break;
            
        case T_VC_AVANCE_0_EN_COURS:
            IsCurrentMoveFinishedGoToState(T_VC_AVANCE_1,2500);
            break;

        case T_VC_AVANCE_1:
            SendState();
            StartMove(T_VC_AVANCE_1_EN_COURS,550,taskVidageChateau.startingPosY,ALIGNED_WITH_MOVE);
            PWMSetSpeedConsigne(VITESSE_ROULEAU_RECRACHE, MOTEUR_ROULEAU); //On recrache
            break;
            
        case T_VC_AVANCE_1_EN_COURS:
            IsCurrentMoveFinishedGoToState(T_VC_TOURNE_1,1600);   
            break;

        case T_VC_TOURNE_1:
            StartRotate(T_VC_TOURNE_1_EN_COURS,75);
            PWMSetSpeedConsigne(VITESSE_ROULEAU_RECRACHE, MOTEUR_ROULEAU); //On recrache
            break;
            
        case T_VC_TOURNE_1_EN_COURS:
            IsCurrentMoveFinishedGoToState(T_VC_TOURNE_2,500);
            break;
            
        case T_VC_TOURNE_2:
            StartRotate(T_VC_TOURNE_2_EN_COURS,95);
            PWMSetSpeedConsigne(VITESSE_ROULEAU_RECRACHE, MOTEUR_ROULEAU); //On recrache
            break;
            
        case T_VC_TOURNE_2_EN_COURS:
            IsCurrentMoveFinishedGoToState(T_VC_RECULE_1,700);
            break;

        case T_VC_RECULE_1:
            SendState();
            StartMove(T_VC_RECULE_1_EN_COURS,330,taskVidageChateau.startingPosY,NOT_ALIGNED);
            PWMSetSpeedConsigne(VITESSE_ROULEAU_RECRACHE, MOTEUR_ROULEAU); //On recrache
            break;

        case T_VC_RECULE_1_EN_COURS:
            IsCurrentMoveFinishedGoToState(T_VC_AVANCE_0,1600);
            break;

        case T_VC_FIN:
            SendState();
            robotState.taskState = T_VC_FIN_EN_COURS;
            PWMSetSpeedConsigne(VITESSE_ROULEAU_ARRET, MOTEUR_ROULEAU); //On recrache
            //taskVidageChateau.nbTaskCompleted++;
            break;

        case T_VC_FIN_EN_COURS:
            break;

        default:
            robotState.taskState = T_VC_FIN;
            break;
    }
}
void WaypointMovementGenerator<Creature>::Reset(Creature& creature)
{
    creature.addUnitState(UNIT_STAT_ROAMING);
    StartMove(creature);
}
void WaypointMovementGenerator<Creature>::StartMoveNow(Creature& creature)
{
    i_nextMoveTime.Reset(0);
    StartMove(creature);
}
Пример #6
0
LRESULT CALLBACK CCustomPlayer::_MainWindowWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	switch(message) 
	{

		case WM_DROPFILES:		// Load any dropped file
		{

			char FileName[_MAX_PATH];
			HDROP hdrop=(HDROP)wParam;
			DragQueryFile(hdrop,0,FileName,_MAX_PATH);
			Reset();
			_Load(FileName);
			_FinishLoad();
			break;
		}	

	case WM_MOUSEMOVE:
		{
			// we allow window dragging enabled in the player.ini file !
			if (GetPAppStyle()->g_MouseDrag==1)
			{
				DoMMove(lParam,wParam);
			}
		}
	case WM_ACTIVATEAPP:
		{
			OnActivateApp(wParam);
		}
		break;

		// Minimum size of the player window
	case WM_GETMINMAXINFO:
		// this message is not very useful because
		// the main window of the player is not resizable ...
		// but perhaps it will change so we manage this message.
		{
			CCustomPlayer& player = CCustomPlayer::Instance();
			if((LPMINMAXINFO)lParam) {
				((LPMINMAXINFO)lParam)->ptMinTrackSize.x=MininumWindowedWidth();
				((LPMINMAXINFO)lParam)->ptMinTrackSize.y=MininumWindowedHeight();
			}
		}
		break;

		// Sends a Message "OnClick" or "OnDblClick" if any object is under mouse cursor
	case WM_LBUTTONDBLCLK:
	case WM_LBUTTONDOWN:
		{
			
			OnMouseClick(message);

			//  [2/18/2008 mc007]
			// we allow window dragging enabled in the player.ini file !
			if (GetPAppStyle()->g_MouseDrag)
			{
				StartMove(lParam);
			}
			
		}
		break;

		// Size and focus management
	case WM_SIZE:
		// if the window is maximized or minimized
		// we get/lost focus.
		{
			if (wParam==SIZE_MINIMIZED) {
				OnFocusChange(FALSE);
			} else if (wParam==SIZE_MAXIMIZED) {
				OnFocusChange(TRUE);
			}
		}
		break;

		// Manage system key (ALT + KEY)
	case WM_SYSKEYDOWN:	
		{
//			return OnSysKeyDownMainWindow(theApp.m_Config,(int)wParam);
		}
		break;

		// Repaint main frame
	case WM_PAINT:
		{
			OnPaint();
		}
		break;

		// The main windows has been closed by the user
	case WM_CLOSE:
		PostQuitMessage(0);
		break;

		// Focus management
	case WM_KILLFOCUS:
	case WM_SETFOCUS:
		{
			OnFocusChange(message==WM_SETFOCUS);
		}
		break;

	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}

	return DefWindowProc(hWnd, message, wParam, lParam);
}