Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Sanja Alone

Ищу Человека…


Сообщения: 420
Благодарности: 67

Профиль | Сайт | Отправить PM | Цитировать


Я тоже игрался с msagent-ом. Мои наблюдения:
  1. Поскольку у различных персонажей разные действия, для обработки этой ситуации мне пришлось влепить Switch. А как бы вызывать действия случайным образом (ес-но имеющиеся у конкретного персонажа).
  2. Даже после Unload-а персонажа, в памяти продолжает висеть процесс AgentSvr.exe, к-рый занимает порядка 25-30Мб ОЗУ - это неприкольно, а убить процесс как-то некрасиво...
  3. Если агент был запущен из бесконечного цикла, то, пока он не будет Unload-ен, основной цикл стоит на паузе. В связи с этим возник вопрос о возможности реализации многопоточных задач посредстом AutoIt в целом.
Код: Выделить весь код
#include <File.au3>
#include <Misc.au3>

$Path=@WindowsDir&"\MSAGENT\CHARS\"
$figures=_FileListToArray($Path,"*.acs",1)

;демонстрация
_msagent("Привет! Это просто тест")

Func _msagent($msg)
	If IsArray($figures) Then
		$P = $Path & $figures[Random(1,$figures[0],1)]
		$fig = StringMid($P,StringInStr($P,'\',0,-1)+1)
		$fig = StringLeft($fig,StringInStr($fig,".acs",0,-1)-1)

		If FileExists($P) Then
			$AgentControl = ObjCreate("Agent.Control.1")
			$SinkObject = ObjEvent($AgentControl, "event_")
			If Isobj($AgentControl) Then
				$AgentControl.Connected = True
				$AgentControl.Characters.Load($fig, $P)
				With $AgentControl.Characters($fig)
					.Show
					Switch StringLower($fig)
						Case 'offcat'
							.Play("Greeting")
							.Play("RestPose")
						Case 'dot'
							.Play("Greeting")
							.Play("RestPose")
						Case 'f1'
							.Play("Greeting")
							.Play("RestPose")
						Case 'logo'
							.Play("Greeting")
							.Play("RestPose")
						Case 'rocky'
							.Play("Greeting")
							.Play("RestPose")
						Case 'clippit'
							.Play("Congratulate")
							.Play("RestPose")
						Case 'mnature'
							.Play("Congratulate")
							.Play("RestPose")
						Case 'qmark'
							.Play("Welcome")
							.Play("RestPose")
						Case 'angel'
							.Play("Halo")
							.Play("Glow")
							.Play("Glowoff")
						Case 'blonde fem a'
							.Play("Blink")
							.Play("Wink")
							.Play("RestPose")
						Case 'candy'
							.Play("Blink")
							.Play("RestPose")
						Case 'max'
							.Play("Blink")
							.Play("RestPose")
						Case 'paige'
							.Play("Pointleftreturn")
						Case 'reaper'
							.Play("Smile")
							.Play("RestPose")
						Case 'scientist'
							.Play("Blackboard")
							.Play("Entropy")
							.Play("RestPose")
						Case 'sharky'
							;
						Case Else
							.Play("Greet")
							.Play("RestPose")
					EndSwitch
					While _KeyPressed()=0
						.MoveTo(Random(180,@DesktopWidth-180,1), Random(260,@DesktopHeight-260,1))
						.Speak($msg)
					WEnd
					.Hide
					.StopAll
				Endwith
				$AgentControl.Characters.Unload($fig)
			EndIf
		EndIf
	EndIf
EndFunc

Func _KeyPressed()
	Local $j
	Local $dll = DllOpen("user32.dll")
	For $j = 01 to 20
		If _IsPressed($j, $dll) Then
			DllClose($dll)
			Return 1
		EndIf
	Next
	DllClose($dll)
	Return 0
EndFunc

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:16, 12-03-2007 | #271