コード例 #1
0
ファイル: MoverMsg.cpp プロジェクト: iceberry/flyffsf
void	CMover::CMD_SetMeleeAttack( OBJID idTarget, FLOAT fRange )
{
	ItemProp *pProp = GetActiveHandItemProp();
	if( pProp->dwItemKind2 == IK2_TOOLS )			// 툴을 들고선 공격못한다,.
		return;

	if( m_pActMover->IsActAttack() )	
		return;
	if( IsDie() )	
		return;										// 죽었을때 사용금지.

	// 요요는 밀리어택이긴 하나 약간 거리를 두고 공격한다.( 프로퍼티 참조함 )
	if( pProp->dwItemKind3 == IK3_YOYO )
		fRange = GetAttackRange( pProp->dwAttackRange );
	
#ifdef __CLIENT
	ClearActParam();
	SetDestObj( idTarget, fRange );		// 이동할 목표물을 idTarget으로 설정.
	SetCmd( OBJACT_MELEE_ATTACK, idTarget );		// 사정거리가 되었을때 실행할 명령 셋팅.
#elif defined(__WORLDSERVER)
#ifdef __TRAFIC_1222
	if( GetDestId() == idTarget )
		return;
#endif	// __TRAFIC_1222
	SetDestObj( idTarget, fRange );		// 이동할 목표물을 idTarget으로 설정.
	g_UserMng.AddMoverSetDestObj( this, idTarget, fRange );
#endif // WORLDSERVER
}
コード例 #2
0
ファイル: chassis_er1.cpp プロジェクト: BackupTheBerlios/rack
chassis_er1_reply ChassisEr1::SendCmd(unsigned char paddress, unsigned char pcode)
{
    chassis_er1_cmd cmd;

    cmd = SetCmd(paddress, pcode);
    return _SendCmd(&cmd);
}
コード例 #3
0
ファイル: SVTelnet.cpp プロジェクト: SiteView/ecc82Server
int SVUnixOpMonitor::telnetExecCmd(char * strCmd)
{
	SetCmd(strCmd);
	//return telnet();
	return  telnet_command();

}
コード例 #4
0
ファイル: MoverMsg.cpp プロジェクト: iceberry/flyffsf
void	CMover::CMD_SetUseItem( CCtrl *pCtrl )
{
	ClearActParam();
	if( m_pActMover->IsFly() )
		SetDestObj( pCtrl, 20.0f );
	else
		SetDestObj( pCtrl );
	SetCmd( OBJACT_USEITEM );		// 사정거리가 되었을때 실행할 명령 셋팅.
}
コード例 #5
0
ファイル: scsi.c プロジェクト: daemqn/Atari_ST_Sources
LONG PreventMediaRemoval(BOOLEAN Prevent)
{{{
  if (Prevent)
    SetCmd6(0x01E,0,1);
  else
    SetCmd6(0x01E,0,0);

  return In(SetCmd((BYTE *)&Cmd6, 6, NULL, 0, DefTimeout));
}}}
コード例 #6
0
ファイル: main.c プロジェクト: 0x1abin/linux_kernel_driver
void SendCmd(int value)
{
	unsigned long flag;
	unsigned b;

	SetCmd(0xAD);

	local_irq_save(flag);

	do {
		b = inb(0x64);
	} while (b & 0x2);

	outb(value, 0x60);

	SetCmd(0xAE);

	local_irq_restore(flag);
}
コード例 #7
0
ファイル: scsidisk.c プロジェクト: daemqn/Atari_ST_Sources
LONG Write10(ULONG BlockAdr,
                UWORD TransferLen, void *buffer)
{{{
LONG ret;

  while (TransferLen > MaxDmaLen / BlockLen)
  {
    SetCmd10(0x02A, BlockAdr, MaxDmaLen / BlockLen);
    ret = Out(SetCmd((BYTE *)&Cmd10, 10, buffer, MaxDmaLen / BlockLen * BlockLen, 20*200));
    if (ret != 0)
      return ret;
    BlockAdr += MaxDmaLen / BlockLen;
    TransferLen -= MaxDmaLen / BlockLen;
    buffer = (void *)((long)buffer + MaxDmaLen / BlockLen * BlockLen);
  }

  SetCmd10(0x02A, BlockAdr, TransferLen);
  return Out(SetCmd((BYTE *)&Cmd10, 10, buffer, BlockLen * (ULONG)TransferLen, 20*200));
}}}
コード例 #8
0
ファイル: scsidisk.c プロジェクト: daemqn/Atari_ST_Sources
LONG Read6(ULONG BlockAdr,
                UWORD TransferLen, void *buffer)
{{{
LONG ret;

  while (TransferLen > MaxDmaLen / BlockLen)
  {
    SetCmd6(0x08, BlockAdr, MaxDmaLen / BlockLen);
    ret = In(SetCmd((BYTE *)&Cmd6, 6, buffer, MaxDmaLen / BlockLen * BlockLen, DefTimeout));
    if (ret != 0)
      return ret;

    BlockAdr += MaxDmaLen / BlockLen;
    TransferLen -= MaxDmaLen / BlockLen;
    buffer = (void *)((long)buffer + MaxDmaLen / BlockLen * BlockLen);
  }

  SetCmd6(0x08, BlockAdr, TransferLen);
  return In(SetCmd((BYTE *)&Cmd6, 6, buffer, BlockLen * (ULONG)TransferLen, DefTimeout));
}}}
コード例 #9
0
ファイル: scsi.c プロジェクト: daemqn/Atari_ST_Sources
LONG Inquiry(void  *data, BOOLEAN Vital, UWORD VitalPage, WORD length)
{{{

  SetCmd6(0x12, 0, length);

  if (Vital)
  {
    Cmd6.LunAdr |= 1;                 /* Vital gefordert  */
    Cmd6.Adr = VitalPage * 0x100;     /* Page eintragen   */
  }
  return (In(SetCmd((BYTE *)&Cmd6, 6, data, length, 1000)));
}}}
コード例 #10
0
ファイル: scsidisk.c プロジェクト: daemqn/Atari_ST_Sources
LONG StartStop(BOOLEAN LoadEject, BOOLEAN StartFlag)
{{{

  if (StartFlag)
    SetCmd6(0x01B,0,1);
  else
    SetCmd6(0x01B,0,0);

  if (LoadEject)
    Cmd6.Len |= 1;

  return In(SetCmd((BYTE *)&Cmd6, 6, NULL, 0, 60*200));
}}}
コード例 #11
0
static void UpdateConf (Widget_t w, void *p_pvPlugin)
	/* Called back when the configuration/options window is closed */
{
    struct plugin_t *poPlugin = (plugin_t *) p_pvPlugin;
    struct conf_t  *poConf = &(poPlugin->oConf);
    struct gui_t   *poGUI = &(poConf->oGUI);

    TRACE ("UpdateConf()\n");
    SetCmd (poGUI->wTF_Cmd, poPlugin);
    SetLabel (poGUI->wTF_Title, poPlugin);
    SetMonitorFont (poPlugin);
    SetTimer (poPlugin);
}				/* UpdateConf() */
コード例 #12
0
ファイル: scsi.c プロジェクト: daemqn/Atari_ST_Sources
LONG ModeSelect(UWORD        SelectFlags,
                   void        *Buffer,
                   UWORD        ParmLen)
{{{
  ParmLen = ParmLen
            + sizeof(tParmHead)       /* ParameterHeader                */
            + sizeof(tBlockDesc);     /* Block-Deskriptor               */

  SetCmd6(0x15, 0, ParmLen);
  Cmd6.LunAdr |= SelectFlags % 0x20;

  return Out(SetCmd((BYTE *)&Cmd6, 6, Buffer, ParmLen, DefTimeout));
}}}
コード例 #13
0
ファイル: chassis_er1.cpp プロジェクト: BackupTheBerlios/rack
// paddress = [0|1] left channel or right channel, pcode = code, uwData
chassis_er1_cmd ChassisEr1::SetCmd_with_arg(unsigned char  paddress, unsigned char  pcode,
                  int  wData1)
{
    chassis_er1_cmd cmd;

    cmd=SetCmd(paddress,pcode);
    cmd.data[0]=HIBYTE(wData1);
    cmd.data[1]=LOBYTE(wData1);

    cmd.checksum = ~(~(cmd.checksum-1)+ cmd.data[0] + cmd.data[1]) + 1;
    cmd.size = 6;

    return cmd;
}
コード例 #14
0
ファイル: scsi.c プロジェクト: daemqn/Atari_ST_Sources
LONG ModeSense(UWORD     PageCode,
                  UWORD     PageControl,
                  void     *Buffer,
                  UWORD     ParmLen)
{{{
  ParmLen = ParmLen
            + sizeof(tParmHead)       /* ParameterHeader                */
            + sizeof(tBlockDesc);     /* Block-Deskriptor               */

  SetCmd6(0x1A, 0, ParmLen);
  Cmd6.Adr = ((PageControl * 64 + PageCode) % 0x100)*0x100;

  return In(SetCmd((BYTE *)&Cmd6, 6, Buffer, ParmLen, DefTimeout));
}}}
コード例 #15
0
ファイル: MoverMsg.cpp プロジェクト: iceberry/flyffsf
void	CMover::CMD_SetCollect( CObj *pObj )
{
	if( IsInvalidObj( pObj ) )	return;
	if( pObj->GetType() != OT_MOVER )	return;
	if( m_pActMover->IsActAttack() )	return;
	if( m_pActMover->IsActJump() )		return;
	if( m_pActMover->IsActDamage() )		return;
	if( IsDie() )	return;		// 죽었을때 사용금지.
	// 
	if( GetCollector()) 
	{
		CMover *pTarget = (CMover *)pObj;
		ClearActParam();
		SetDestObj( pTarget->GetId(), 3.0f );		// 이동할 목표물을 idTarget으로 설정.
		SetCmd( OBJACT_COLLECT, pTarget->GetId() );		// 사정거리가 되었을때 실행할 명령 셋팅.
	}
}
コード例 #16
0
VolumeActionCommand::VolumeActionCommand(Volume *aVolume,
                                         const char *aAction,
                                         const char *aExtraArgs,
                                         VolumeResponseCallback *aCallback)
  : VolumeCommand(aCallback),
    mVolume(aVolume)
{
  nsAutoCString cmd;

  cmd = "volume ";
  cmd += aAction;
  cmd += " ";
  cmd += aVolume->Name().get();

  // vold doesn't like trailing white space, so only add it if we really need to.
  if (aExtraArgs && (*aExtraArgs != '\0')) {
    cmd += " ";
    cmd += aExtraArgs;
  }
  SetCmd(cmd);
}
コード例 #17
0
ファイル: scsidisk.c プロジェクト: daemqn/Atari_ST_Sources
LONG ReadCapacity(BOOLEAN PMI, ULONG *BlockAdr, ULONG *BlockLen)
{{{
ULONG Data[2];
LONG ret;

  SetCmd10(0x25, *BlockAdr, 0);

  if (PMI)
    Cmd10.LenLow = 1;

  /* und rufen */
  ret = In(SetCmd((BYTE *)&Cmd10, 10, Data, sizeof(Data), DefTimeout));

  /* und Antwort, bitte */
  if (ret == 0)
  {
    *BlockAdr = Data[0];
    *BlockLen = Data[1];
  }

  return ret;
}}}
コード例 #18
0
ファイル: MoverMsg.cpp プロジェクト: iceberry/flyffsf
void	CMover::CMD_SetMagicAttack( OBJID idTarget, int nMagicPower )
{
	TRACE("CMD_SetMagicAttack(%d, %d)\n", idTarget, nMagicPower );

	if( m_pActMover->IsActAttack() )		// 이미 어택중이면 취소.
		return;
	if( IsDie() )	return;		// 죽었을때 사용금지.
	
	// 손에 들고 있는 완드의 프로퍼티 꺼냄
	// 사정거리 계산함
	ItemProp *pItemProp = GetActiveHandItemProp();
	if( pItemProp == NULL )		return;

	if( pItemProp->dwItemKind3 != IK3_WAND /*&& pItemProp->dwItemKind3 != IK3_STAFF*/ )	//Staff->ata2k	// 들고있는 무기가 완드가 아니면 취소
		return;
	
	// 도달범위 - 얼마나 가까이 근접해야하는가. 미터단위
	float	fArrivalRange = GetAttackRange( AR_WAND );
	
	ClearActParam();
	SetDestObj( idTarget, fArrivalRange );		// 이동할 목표물을 idTarget으로 설정.
	SetCmd( OBJACT_MAGIC_ATTACK, idTarget, nMagicPower );		// 사정거리가 되었을때 실행할 명령 셋팅.
}
コード例 #19
0
ファイル: MoverMsg.cpp プロジェクト: iceberry/flyffsf
void	CMover::CMD_SetRangeAttack( OBJID idTarget, int nPower )
{
	TRACE("CMD_SetRangeAttack(%d, %d)\n", idTarget, nPower );

	if( m_pActMover->IsActAttack() )		// 이미 어택중이면 취소.
		return;

	if( IsDie() )	
		return;								// 죽었을때 사용금지.
	
	ItemProp *pItemProp = GetActiveHandItemProp();
	if( pItemProp == NULL )		
		return;
	
	if( pItemProp->dwItemKind3 != IK3_BOW )	// 들고있는 무기가 보우가 아니면 에러
		return;
	
	if( IsBullet( pItemProp ) == FALSE )
		return;
	
	ClearActParam();
	SetDestObj( idTarget, GetAttackRange( pItemProp->dwAttackRange ), TRUE );		// 이동할 목표물(idTarget)과 그 거리를 설정 
	SetCmd( OBJACT_RANGE_ATTACK, idTarget, nPower, 0 );		// 사정거리가 되었을때 실행할 명령 셋팅.
}
コード例 #20
0
ファイル: MoverMsg.cpp プロジェクト: iceberry/flyffsf
//
// 외부에서 UseSkill을 명령할땐 이것으로 호출하자.
// sutType : 스킬을 사용할때 스킬큐에서 연타로 사용한건가 일반적인 사용을 한건가.c
//
int	CMover::CMD_SetUseSkill( OBJID idTarget, int nSkillIdx, SKILLUSETYPE sutType )
{
	m_oaCmd = OBJACT_NONE;
	TRACE( "CMD_SetUseSkill( " );
	if( m_pActMover->IsFly() )	return 0;				// 비행중엔 스킬사용 금지.
	if( m_pActMover->IsActAttack() )	return 0;
	if( m_pActMover->IsActJump() )	return 0;			// 점프중엔 사용금지.
	if( m_pActMover->GetState() & OBJSTA_DMG_FLY_ALL )		return 0;	// 데미지 플라이중엔 스킬사용금지.
	if( IsDie() )	return 0;		// 죽었을때 사용금지.

	LPSKILL pSkill	= GetSkill( 0, nSkillIdx );		// this가 가진 스킬중 nIdx에 해당하는 스킬을 꺼낸다.
	if( pSkill == NULL )
	{
		Error( "CMD_SetUseSkill : %s skill(%d) not found", m_szName, nSkillIdx );
		return 0;	// 
	}

	ItemProp* pSkillProp = pSkill->GetProp();
	if( pSkillProp == NULL )		// JobSkill 리스트에서 꺼낸 스킬의 프로퍼티를 꺼냄.
	{
		Error( "CMD_SetUseSkill : %s. skill(%d) property not found", m_szName, pSkill->dwSkill );
		return 0;	// 
	}
	
	if( IsPlayer() && IsStateMode( STATE_BASEMOTION_MODE ) )	// 시전중(준비시간)일땐 사용금지.
	{
	#ifdef __CLIENT
		g_DPlay.SendStateModeCancel( STATE_BASEMOTION_MODE, STATEMODE_BASEMOTION_CANCEL );
	#endif 
		return 0;		
	}

	// 도달범위 - 얼마나 가까이 근접해야하는가. 미터단위
	float	fArrivalRange = 0.0f;		
	fArrivalRange = GetAttackRange( pSkillProp->dwAttackRange );
	
	switch( pSkillProp->dwUseChance )
	{
	case WUI_NOW:	// 타겟팅과 상관없이 자기자신에게 쓰는 방식.
		idTarget = GetId();
		break;
	case WUI_TARGETINGOBJ:	// 셀렉트 되어 있는 타겟에게 사용.
		{
#ifdef __CLIENT
		CObj *pFocusObj = GetWorld()->GetObjFocus();
		if( pFocusObj && pFocusObj->GetType() == OT_MOVER )
			idTarget = ((CMover*)pFocusObj)->GetId();
#else
		if( IsPlayer() )
			idTarget = ((CUser *)this)->m_idSetTarget;
#endif // __CLIENT
		}

		break;
#ifdef __CLIENT
	case WUI_TARGETCURSORPTZ:
		{
			idTarget = GetId();
			
			CRect rect;
			D3DXVECTOR3 vPos;
			CWndWorld* pWndWorld;
			
			pWndWorld = (CWndWorld*)g_WndMng.GetWndBase( APP_WORLD );

			rect = pWndWorld->GetClientRect();

			if( GetWorld()->ClientPointToVector( NULL, rect, pWndWorld->GetMousePoint(), &GetWorld()->m_matProj, &GetWorld()->GetCamera()->m_matView, &vPos, TRUE ) )
			{
#ifdef __SKILL0517
				AddSkillProp* pAddSkillProp = prj.GetAddSkillProp( pSkillProp->dwSubDefine, GetSkillLevel( pSkill ) );		// UseSkill에서 사용한 스킬의 프로퍼티 꺼냄
#else	// __SKILL0517
				AddSkillProp* pAddSkillProp = prj.GetAddSkillProp( pSkillProp->dwSubDefine, pSkill->dwLevel );		// UseSkill에서 사용한 스킬의 프로퍼티 꺼냄
#endif	// __SKILL0517
				if( pAddSkillProp == NULL )
				{
					Error( "CMover::OnMagicSkill : %s. add스킬(%d)의 프로퍼티가 없다.", m_szName, nSkillIdx );
					return 0;	// property not found
				}
				
				FLOAT	fDist;
				FLOAT	fMaxDistSq;
				D3DXVECTOR3	vDist;
				fMaxDistSq  = (float)pAddSkillProp->dwSkillRange;
				fMaxDistSq *= fMaxDistSq;
				vDist = vPos - GetPos();
				fDist = D3DXVec3LengthSq( &vDist );	

				SetAngle( GetDegree(vPos, GetPos()) );		// 목표쪽으로 몸을 돌림.
				
				// 텔레포트 할 위치가 멀경우 현제 스킬에 해당하는 거리로 바꿔준다
				if( fDist > fMaxDistSq )
				{
					FLOAT fLength;
					D3DXVECTOR3 vDirNor;
					D3DXVec3Normalize( &vDirNor, &vDist );
					fLength = (float)pAddSkillProp->dwSkillRange;
					float y = vPos.y;
					vPos = GetPos() + (vDirNor * fLength);
					vPos.y	= y;

					// 스킬에 해당하는 거리로 바꾼곳이 못가는 지역이라면 갈수 있는 지역을 검사한다.
					int nAttr = GetWorld()->GetHeightAttribute( vPos.x, vPos.z );

					if( nAttr != HATTR_NONE ) 
					{
						while( nAttr != HATTR_NONE )
						{
							if( nAttr == HATTR_NOFLY )
								break;
							
							fLength -= 1.0f; // 1미터씩 줄여가며 계산한다.
							vPos  = GetPos() + (vDirNor * fLength);
							nAttr = GetWorld()->GetHeightAttribute( vPos.x, vPos.z );

							// 캐릭터의 앞 뒤로 이동불가 일 경우 뒷쪽이 이동불가 해제 될때 까지 계속 계산하여 이동시킴
							// 그러므로 텔레포트 스킬 범위를 넘어설 경우 원래 자리로 텔레포트 하도록 처리
							D3DXVECTOR3 vTemp = vPos - GetPos();
							float fTemp = D3DXVec3LengthSq( &vTemp );
							if(fTemp > fMaxDistSq)
							{
								vPos = GetPos();
								break;
							}
						}
						
						// 한번더 줄여줌
						fLength -= 1.0f; 
						vPos = GetPos() + (vDirNor * fLength);

						// 줄인 곳이 이동불가 지역일 수 있다.
						nAttr = GetWorld()->GetHeightAttribute( vPos.x, vPos.z );
						if( nAttr != HATTR_NONE )
						{
							vPos = GetPos();
						}
					}
				}
				else // 텔레포트 할 위치가 해당스킬 거리보다 작을경우
				{
					int nAttr = GetWorld()->GetHeightAttribute( vPos.x, vPos.z );

					FLOAT fLength;
					D3DXVECTOR3 vDirNor;
					D3DXVec3Normalize( &vDirNor, &vDist );
					fLength = 0.0f;

					while( nAttr != HATTR_NONE )
					{
						if( nAttr == HATTR_NOFLY )
							break;

						fLength -= 1.0f;
						vPos = GetPos() + (vDirNor * fLength);
						
						nAttr = GetWorld()->GetHeightAttribute( vPos.x, vPos.z );

						// 캐릭터의 앞 뒤로 이동불가 일 경우 뒷쪽이 이동불가 해제 될때 까지 계속 계산하여 이동시킴
						// 그러므로 텔레포트 스킬 범위를 넘어설 경우 원래 자리로 텔레포트 하도록 처리
						D3DXVECTOR3 vTemp = vPos - GetPos();
						float fTemp = D3DXVec3LengthSq( &vTemp );
						if(fTemp > fMaxDistSq)
						{
							vPos = GetPos();
							break;
						}
					}
				}

				if( IsActiveMover() && g_eLocal.GetState( EVE_SCHOOL ) )	// 학교이벤섭이면.
				{
					D3DXVECTOR3 v1, v2;
					v1 = GetPos();	v1.y += 0.1f;
					v2 = vPos;		v2.y += 0.1f;
					if( GetWorld()->IntersectObjLine( NULL, v1, v2, FALSE, FALSE ) )	// 텔레포트는 라인체크함.
					{
						g_WndMng.PutString( prj.GetText(TID_GAME_NOMOVING), NULL, prj.GetTextColor(TID_GAME_NOMOVING) );
						g_WndMng.m_pWndWorld->SetNextSkill( NEXTSKILL_NONE );
						return 0;
					}
				}

				pWndWorld->m_vTelePos = vPos;
			}
			else
			{
				g_WndMng.m_pWndWorld->SetNextSkill( NEXTSKILL_NONE );
				g_WndMng.PutString( prj.GetText(TID_GAME_NOMOVING), NULL, prj.GetTextColor(TID_GAME_NOMOVING) );
				return 0;
			}
		}
		break;
#endif // __CLIENT
	}

	// 타인에게 쓰는경우에만 검사...
	if( idTarget != GetId() )		
	{
		CMover *pTarget = prj.GetMover( idTarget );
		if( IsValidObj(pTarget) )
		{
			if( pSkillProp->nEvildoing < 0 )	// 나쁜 스킬은 
				if( IsAttackAble(pTarget) == FALSE )	// 공격허용이 되지 않으면 사용할 수 없음.
					return 0;
				
			if( pSkill->dwSkill == SI_ASS_HEAL_RESURRECTION )	// 부활을 사용했을때
			{
				if( pTarget->IsNPC() || pTarget->IsDie() == FALSE )		// 상대가 NPC거나 상대가 죽어있지 않다면 취소
					return 0;
			} else
			{
				if( pTarget->IsDie() )		// 부활이 아닌 스킬을 사용했을때 상대가 죽어있으면 사용안됨.
					return 0;
			}
		}
	}

	// 타겟 근접 방식.
	switch( pSkillProp->dwExeTarget )
	{
	case EXT_SELFCHGPARAMET:	// 시전자 자신에게 사용하는 종류
		idTarget = GetId();		// 타겟을 자기자신으로 설정.
		SetDestObj( idTarget, fArrivalRange, TRUE );		// 이동할 목표물을 idTarget으로 설정. << 이게 왜 필요하지? ㅡ.ㅡ?
		break;
	case EXT_MAGICATKSHOT:
	case EXT_MAGICATK:			// 원거리에서 마법으로 타겟을 공격
	case EXT_MAGICSHOT:
		if( idTarget == NULL_ID )	return 0;			// 타겟이 없거나 유효하지 않으면 실패.
		SetDestObj( idTarget, fArrivalRange, TRUE );		// 이동할 목표물을 idTarget으로 설정. 다가가는 범위는 fArrivalRange값으로..
		break;
	case EXT_ANOTHERWITH:		// 나 혹은 다른사람에게 시전
		if( idTarget == NULL_ID )	// 타겟이 잡혀있지 않으면
			idTarget = GetId();		// 자신을 타겟으로 잡음
		SetDestObj( idTarget, fArrivalRange, TRUE );		// 이동할 목표물을 idTarget으로 설정.
		break;
	case EXT_AROUNDATK:			// 내 주위적들을 대상.
		idTarget = GetId();		// 타겟을 자기자신으로 설정.
		SetDestObj( idTarget, fArrivalRange, TRUE );		// 이동할 목표물을 idTarget으로 설정.
		break;
	case EXT_OBJCHGPARAMET:		// 타인에게 사용
	default:	// 그외는 모두 근접하자.
		if( idTarget == NULL_ID )	return 0;			// 타겟이 없거나 유효하지 않으면 실패.
		SetDestObj( idTarget, fArrivalRange, TRUE );		// 이동할 목표물을 idTarget으로 설정.
		break;
	}
	
	ClearActParam();
	SetCmd( OBJACT_USESKILL, nSkillIdx, idTarget, sutType );		// 사정거리가 되었을때 실행할 명령 셋팅.
	TRACE( "\n)CMD_SetUseSkill\n" );

	return 1;
}
コード例 #21
0
ファイル: scsi.c プロジェクト: daemqn/Atari_ST_Sources
LONG TestUnitReady(void)
{
  SetCmd6(0x00, 0, 0);
  return In(SetCmd((BYTE *)&Cmd6, 6, NULL, 0, DefTimeout));
}
コード例 #22
0
ファイル: MoverMove.cpp プロジェクト: iceberry/flyffsf
//
//
// 클라이언트용
void CMover::ProcessMoveArrival( CCtrl *pObj )
{
	// 클라이언트 처리
	if( IsActiveMover() )
	{
		switch( m_oaCmd )	// 목표에 도착한 후의 명령 처리.
		{
		case OBJACT_USESKILL:
			if( pObj->GetType() == OT_MOVER && ( m_SkillTimerStop || m_SkillTimer.TimeOut() ) )
			{
				CWorld *pWorld = GetWorld();
				D3DXVECTOR3 vStart = GetPos();			vStart.y += 0.5f;
				D3DXVECTOR3 vEnd   = pObj->GetPos();	vEnd.y += 0.5f;

				if( pWorld->IntersectObjLine( NULL, vStart, vEnd, FALSE, FALSE ) )
				{
					g_WndMng.PutString( prj.GetText( TID_GAME_BLOCKTARGETING ), NULL, prj.GetTextColor( TID_GAME_BLOCKTARGETING ) );
					g_WndMng.m_pWndWorld->SetNextSkill( NEXTSKILL_NONE );
					break;
				}

				PlayCombatMusic();

				int nSkillIdx = GetCmdParam(0);
				OBJID idTarget = (OBJID)GetCmdParam(1);
				SKILLUSETYPE sutType = (SKILLUSETYPE)GetCmdParam(2);
				if( (m_dwReqFlag & REQ_USESKILL) == 0 )	// 응답 요청중일땐 다시 보내선 안된다.
				{
					LPSKILL pSkill	= GetSkill( 0, nSkillIdx );		// this가 가진 스킬중 nIdx에 해당하는 스킬을 꺼낸다.
					if( pSkill == NULL )
					{
						Error( "CMD_SetUseSkill : %s skill(%d) not found", m_szName, nSkillIdx );
						return;	// skill not found
					}

					if( pSkill->dwSkill == SI_MAG_MAG_BLINKPOOL )
					{
						CWndWorld* pWndWorld;
						pWndWorld = (CWndWorld*)g_WndMng.m_pWndWorld;		
						{
							vStart = GetPos();		vStart.y += 1.0f;
							vEnd = pWndWorld->m_vTelePos;
							if( pWorld->IntersectObjLine( NULL, vStart, vEnd, FALSE, FALSE ) )
							{
								g_WndMng.m_pWndWorld->SetNextSkill( NEXTSKILL_NONE );
								g_WndMng.PutString( prj.GetText( TID_GAME_BLOCKTARGETING ), NULL, prj.GetTextColor( TID_GAME_BLOCKTARGETING ) );
								break;
							}
						}
						
						if(g_pMoveMark!=NULL) g_pMoveMark->m_pSfxObj->m_nCurFrame=180;
						CreateSfx(g_Neuz.m_pd3dDevice,XI_GEN_MOVEMARK01,pWndWorld->m_vTelePos);
					}
					

					// 뒤에서 공격가능한 스킬인지 판단한다
					// 강탈 스킬은 뒤에서 사용가능(일단 클라에서 판정하자~)
					if( pSkill->GetProp() && pSkill->GetProp()->dwAtkStyle == AS_BACK )
					{						
						D3DXVECTOR3 v3Pos;
						D3DXVECTOR3 v3PosSrc;
						D3DXVECTOR3 v3PosDest;
						
						// 방향벡터 1
						v3PosSrc = pObj->GetPos() - GetPos();
						D3DXVec3Normalize( &v3PosSrc, &v3PosSrc );
						
						// 방향벡터 2
						AngleToVectorXZ( &v3Pos, pObj->GetAngle(), 3.0f );
						v3PosDest = (pObj->GetPos()+v3Pos) - pObj->GetPos();
						D3DXVec3Normalize( &v3PosDest, &v3PosDest );
						
						FLOAT fDir = D3DXVec3Dot( &v3PosSrc, &v3PosDest );

						// 뒤가 아니면 스킬 사용 불가!
						if( fDir < 0.3f )
						{
							g_WndMng.PutString( prj.GetText(TID_GAME_NEVERKILLSTOP) );
							break;
						}
					}
					
#if __VER >= 8 // __S8_PK
					// 카오에게 좋은 스킬을 사용할때는 Control 키를 눌러야 함
					if( g_eLocal.GetState( EVE_PK ) )
					{
						CMover * pMover;
						pMover = prj.GetMover( idTarget );
						if( IsValidObj(pMover) && pMover != g_pPlayer && pMover->IsPlayer() && pMover->IsChaotic() )
							if( pSkill->GetProp()->nEvildoing > 0 ) // 좋은 스킬
								if( !(GetAsyncKeyState(VK_CONTROL) & 0x8000) )
									break;
					}
#endif // __VER >= 8 // __S8_PK
					
					TRACE( "OBJACT_USESKILL %d\n", nSkillIdx );
#if __VER >= 8 // __S8_PK
					BOOL bControl = ((GetAsyncKeyState(VK_CONTROL) & 0x8000)? TRUE:FALSE);
					g_DPlay.SendUseSkill( 0, nSkillIdx, idTarget, sutType, bControl );	// 목표지점에 도착하면 스킬쓴다고 알림.
#else // __VER >= 8 // __S8_PK
					g_DPlay.SendUseSkill( 0, nSkillIdx, idTarget, sutType );	// 목표지점에 도착하면 스킬쓴다고 알림.
#endif // __VER >= 8 // __S8_PK

					m_dwReqFlag |= REQ_USESKILL;	// 응답 요청중
					
				}
				ClearDestObj();		// 목표에 도달하면 추적을 멈춤.
				SendActMsg( OBJMSG_STOP );
				if( !m_SkillTimerStop )
					m_SkillTimer.Reset();
			}
			break;
		//------------------------------------------
		case OBJACT_MELEE_ATTACK:
			if( pObj->GetType() == OT_MOVER )
			{
				ItemProp *pItemProp = GetActiveHandItemProp(); 
				if( pItemProp && pItemProp->dwItemKind3 == IK3_YOYO )
				{
					CWorld *pWorld = GetWorld();
					D3DXVECTOR3 vStart = GetPos();			vStart.y += 0.5f;
					D3DXVECTOR3 vEnd   = pObj->GetPos();	vEnd.y += 0.5f;
					
					if( pWorld->IntersectObjLine( NULL, vStart, vEnd, FALSE, FALSE ) )
					{
						g_WndMng.PutString( prj.GetText( TID_GAME_BLOCKTARGETING ), NULL, prj.GetTextColor( TID_GAME_BLOCKTARGETING ) );
						break;
					}
				}
				
				DoAttackMelee( (CMover *)pObj );		// pObj를 일반공격.
			}
			break;
		//---------------------------------------------
		case OBJACT_MAGIC_ATTACK:
			if( pObj->GetType() == OT_MOVER )
			{
				PlayCombatMusic();

				OBJID	idTarget = GetCmdParam(0);
				int		nMagicPower = GetCmdParam(1);
				CMover *pTarget = prj.GetMover( idTarget );		// 타겟의 아이디를 포인터로 읽음.
				if( IsInvalidObj(pTarget) )		break;			// 타겟이 거시기한 포인터면 취소시킴.
				
				SendActMsg( OBJMSG_STAND );
				ClearDestObj();		// 목표에 도달하면 추적을 멈춤.
				DoAttackMagic( pTarget, nMagicPower );
			}
			break;
		case OBJACT_RANGE_ATTACK:
			{
				if( pObj->GetType() == OT_MOVER )
				{
					PlayCombatMusic();

					OBJID	idTarget = GetCmdParam(0);
					int		nPower = GetCmdParam(1);
					CMover *pTarget = prj.GetMover( idTarget );		// 타겟의 아이디를 포인터로 읽음.
					if( IsInvalidObj(pTarget) )		break;			// 타겟이 거시기한 포인터면 취소시킴.
					
					SendActMsg( OBJMSG_STAND );
					SendActMsg( OBJMSG_STOP_TURN );
					
					ClearDestObj();									// 목표에 도달하면 추적을 멈춤.

					DoAttackRange( pTarget, nPower, 0 );			// nPower를 dwItemID에 넣는다.
				}				
			}
			break;
		//---------------------------------------------
		case OBJACT_USEITEM:
			ClearDestObj();	// 그외는 목표에 도착하면 멈춤.
			SendActMsg( OBJMSG_STAND );
			SetAngle( GetDegree(pObj->GetPos(), GetPos()) );		// 목표쪽으로 몸을 돌림.
			break;
		//---------------------------------------------
		case OBJACT_COLLECT:
			ClearDestObj();	// 그외는 목표에 도착하면 멈춤.
			SendActMsg( OBJMSG_STOP );
			SetAngle( GetDegree(pObj->GetPos(), GetPos()) );		// 목표쪽으로 몸을 돌림.
			g_DPlay.SendDoCollect( pObj );						// 서버로 보냄.
			break;
		//---------------------------------------------
		default:
			ClearDestObj();	// 그외는 목표에 도착하면 멈춤.
			SendActMsg( OBJMSG_STOP );
			break;
			
		}
		SetCmd( OBJACT_NONE );
	}
	else
	{
		BOOL bQuery	= m_pActMover->IsMove();
		
		ClearDestObj();	// 그외는 목표에 도착하면 멈춤.
		SendActMsg( OBJMSG_STOP );
		OnArrive( pObj->GetId(), 0 );

		if( bQuery )
			g_DPlay.SendQueryGetDestObj( this );
	}
}
コード例 #23
0
ファイル: MoverMove.cpp プロジェクト: iceberry/flyffsf
//
//
// 월드서버용
void CMover::ProcessMoveArrival( CCtrl *pObj )
{
	switch( m_oaCmd )	// 목표에 도착한 후의 명령 처리.
	{
	case OBJACT_USESKILL:
		if( pObj->GetType() == OT_MOVER )	// 타겟이 무버일때면 처리함.
		{
			int nSkillIdx = GetCmdParam(0);
			OBJID idTarget = (OBJID)GetCmdParam(1);
			SKILLUSETYPE sutType = (SKILLUSETYPE)GetCmdParam(2);

			LPSKILL pSkill	= GetSkill( 0, nSkillIdx );		// this가 가진 스킬중 nIdx에 해당하는 스킬을 꺼낸다.
			if( pSkill == NULL )
			{
				Error( "ProcessMoveArrival mover:%s skill(%d) not found.", m_szName, nSkillIdx );
				return;	// skill not found
			}
#if __VER >= 10 // __LEGEND	//	10차 전승시스템	Neuz, World, Trans
			if( pSkill->dwSkill == SI_MAG_MAG_BLINKPOOL || pSkill->dwSkill == SI_RIG_HERO_RETURN )
#else //__LEGEND	//	10차 전승시스템	Neuz, World, Trans
			if( pSkill->dwSkill == SI_MAG_MAG_BLINKPOOL )
#endif	//__LEGEND	//	10차 전승시스템	Neuz, World, Trans
				return;		// 아직 서버명령으로는 블링크풀 사용못함.

			CWorld *pWorld = GetWorld();
			D3DXVECTOR3 vStart = GetPos();			vStart.y += 0.5f;
			D3DXVECTOR3 vEnd   = pObj->GetPos();	vEnd.y += 0.5f;
 
			if( pWorld->IntersectObjLine( NULL, vStart, vEnd, FALSE, FALSE ) )	// 시전자와 타겟사이 장애물을 검사.
			{
				if( IsPlayer() )
					((CUser *)this)->AddDefinedText( TID_GAME_BLOCKTARGETING, "" );
				break;
			}

#if __VER >= 8 // __S8_PK
			BOOL bSuccess = DoUseSkill( 0, nSkillIdx, idTarget, sutType, FALSE );		// 목표지점에 도착하면 스킬 사용시작.
#else // __VER >= 8 // __S8_PK
			BOOL bSuccess = DoUseSkill( 0, nSkillIdx, idTarget, sutType );		// 목표지점에 도착하면 스킬 사용시작.
#endif // __VER >= 8 // __S8_PK
			if( bSuccess == FALSE )
				if( IsPlayer() )
					((CUser *)this)->m_playTaskBar.OnEndSkillQueue( (CUser *)this );

			ClearDestObj();		// 목표에 도달하면 추적을 멈춤.
			SendActMsg( OBJMSG_STOP );
		}
		break;

	default:
		SendActMsg( OBJMSG_STOP );
		ClearDestObj();		// 목표에 도달하면 추적을 멈춤.
		OnArrive( pObj->GetId(), 0 );
		break;
	} // switch

	SetCmd( OBJACT_NONE );
	
	if( IsPlayer() )
		((CUser*)this)->AddQueryGetDestObj( NULL_ID );
}
コード例 #24
0
ファイル: SVTelnet.cpp プロジェクト: SiteView/ecc82Server
int SVUnixOpMonitor::SSHCMD(char *strCmd)
{
	SetCmd(strCmd);
	return SSH();	
}