ȣ��Ŭ�罺 �ΰ����� ��ũ��Ʈ ������

 

����

1.- �Ұ�

2- ��ũ��Ʈ �۵�����

3- ��׳���ũ Ŭ���̾�Ʈ ���� �Լ� ����

4- ��׳���ũ Ŭ���̾�Ʈ ���� ����� ����

5- �⺻������ ������ ��ũ��Ʈ ����

6- ��Ÿ

7- ���� ����

 

1 – �Ұ�

 

��׳���ũ(���� ���) ���� ���� ȣ��Ŭ�罺�� �ൿ��, ��� Ŭ���̾�Ʈ ���α׷��� ��ġ�� ������ AI ���� �ȿ� �ִ� AI.lua, Util.lua �� ���ؼ� �����˴ϴ�.

��� ���̸Ӵ� �ڽ��� ���ϴ� �ΰ������� ������ ���� ���� �ְ�, �ٸ� ����� ���� �ΰ������� ����� ���� �ְ� �ϴ� ���� �����Դϴ�.

 

��ũ��Ʈ�� ��� Ŭ���̾�Ʈ�� �����Ǵ� ������ ���α׷��Դϴ�. �������� ������ �ִٸ� �۵��� ���� ������, �������� ������ �־ ���ϴ� ��� �۵����� �ʽ��ϴ�.

 

��� ���߽ǿ����� ��ũ��Ʈ�� ���� ������ ���� �ʾƵ� ������ ��� �� �ֵ��� ���� ��ũ��Ʈ�� ������ �����Դϴ�.

 

���α׷��ֿ� �ͼ����� ���� ����ڵ鿡 ���ؼ��� �ڽ��� ���ϴ� �ΰ������� �����ϴµ� ������ �ǵ��� ����, ������ ���� ��ȹ�Դϴ�.

 

���α׷��ֿ� ������ �ִ� ����ڵ��� ���ؼ��� ���������� ����� �߰��� ��ȹ�Դϴ�.

 

��ũ��Ʈ�� �ۼ��ϴ� ���� ���(LUA) �Դϴ�. (http://www.lua.org)

 

2- ��ũ��Ʈ �۵� ����

 

��� Ŭ���̾�Ʈ�� Ŭ���̾�Ʈ ���α׷����� ȣ��Ŭ�罺�� ���� �����Ǵ� ������ AI.lua, Util.lua ������ �ؼ��Ͽ��� �ΰ������� �۵�

��ŵ�ϴ�.

 

ȣ��Ŭ�罺�� ���� �����Ǵ� ������ ������ �����ϴ�.

             1) ȣ��Ŭ�罺�� ź����ų ��

       2) ���� ȣ��Ŭ�罺�� ����� ��

       3) ij���ͼ���â���� ȣ��Ŭ�罺�� ������ ij���͸� �����ϰ� ������ ������ ��

       4) ȣ��Ŭ�罺�� ������ ij���Ͱ� �ĸ��� ����, ������ ������ ����� ��

       5) ȣ��Ŭ�罺�� ������ ij���Ͱ� ������Ż�� �̿��� ��

       6) ȣ��Ŭ�罺�� ������ ij���Ͱ� ī���� �̵����ñ½º¸ï¿½ ����� ��

       ��

      

       ���� ���׵��� �������� ȣ��Ŭ�罺�� ���� ������ ���� ��Ÿ�� ���Դϴ�.

 

AI.lua ������ �ؼ��� �Ŀ�, ��� Ŭ���̾�Ʈ ���α׷��� AI.lua ��ũ��Ʈ���� AI ( id) �Լ��� �����ŵ�ϴ�. id�� ���ӻ󿡼� ȣ���� ������ȣ�Դϴ�.  id �� ��� Ŭ���̾�Ʈ�� ����� ��ũ��Ʈ�� �����ϴ� �����Դϴ�.  AI(id) �� ������ �����Ͽ� ������� ��ȭ��ų �� �ֽ��ϴ�. �������� ȣ���� �ൿ, �� �̵�, ����, �Ա�, ��ų������ �Լ��� ��� Ŭ���̾�Ʈ ���α׷��� ����Ǿ� �ֽ��ϴ�. �ڽ��� ������ ������ ��Ȳ����, �����Ǵ� �Լ��� ������� �˴ϴ�.

 

Const.lua ��� Ŭ���̾�Ʈ ���α׷����� ���� ������鿡 ���� ������ ��� �ֽ��ϴ�. Const.lua �� AI.lua Utiil.lua ���� �����մϴ�.

Utiil.lua �� AI.lua ���� �����ϵ��� �Ǿ� �ֽ��ϴ�. ���� Util.lua ���� ����Ʈ �ڷᱸ��, ��� �ܼ��� ����� ����Լ����� �ֽ��ϴ�.

 

ȣ��Ŭ�罺 ������� �ʼ� ������ AI.lua ���ϰ� AI.lua  ���ϳ��� ���ǵ� AI (id) �Լ� �Դϴ�. �� �� ���� �ܴ̿� ��� ���û����Դϴ�. �� Const.lua, Util.lua �� �������� ���Դϴ�. ������ ��ũ��Ʈ �ۼ��� ��  �������� ������ �ʿ��ϴ� �־�߰���?

 

 

3- ��׳���ũ Ŭ���̾�Ʈ ���� �Լ� ����

 

       # id : ���ӳ��� ��ü�� ������ ���� ��ȣ

 

1)  MoveToOwner (id)

id  : ȣ��Ŭ�罺�� id

��ȯ��: ����

��� : ȣ��Ŭ�罺�� ���� ������ �̵���Ų��.

 

2)  Move (id,x,y)

id  : ȣ��Ŭ�罺�� id

                           x  : ������ ���� ��ǥ

y : ������ ���� ��ǥ

��ȯ�� : ����

��� : ȣ��Ŭ�罺�� �������� �̵���Ų��.

 

3)  Attack (id1,id2)

id1 : ������

id2 : �ǰ�����

��ȯ�� : ����

��� : ȣ��Ŭ�罺���� id2�� �����ϵ��� �Ѵ�.

 

4)  GetV (V_,id) end

V_... : ��ü�� �Ӽ��� ��Ÿ���� �����

id  : �Ӽ��� ���

��ȯ�� : V_... �� ���� �޶�����. ���� ���, V_POSITION �� ���� x, y ��ǥ V_HP�� ���� HP �̴�.

��� : id �� �Ӽ�(V_...) �� ��´�. �Ӽ��� ��Ÿ���� ������� Util.lua�� ���ǵǾ� �ִ�.

�Ӽ��� ���� �󼼳����� ��4- ��׳���ũ Ŭ���̾�Ʈ ���� ����� ������ �� �����Ѵ�.

 

5)  GetActors ()

��ȯ�� : id ���� ���մϴ�. ����� table ���·� ��ȯ�ȴ�.

��� : ij���� �þ߿� �ִ� ij����, ���ǽ�, ����, ������, ��ų���� id�� ���´�.

 

6)  GetTick ()

��ȯ�� : 1/1000 �� ������ ����

��� : ��ǻ���� �� ���´�. �� ����, ��ǻ�Ͱ� ������ �� 0 ���� �����ϸ�,  1/1000 �ʸ��� 1 �� �����Ͽ� ���翡 �̸� ���̴�

 

7)  GetMsg (id)

 id  : ȣ��Ŭ�罺�� id

��ȯ�� : ��׳���ũ Ŭ���̾�Ʈ�κ��� ���޵� �޽�����. ����� table ���·� ��ȯ�ȴ�.

��� : ������� �������� ���ɵ��� ��ũ��Ʈ�� �����Ѵ�.

 

8)  GetResMsg (id)

id  : ȣ��Ŭ�罺�� id

��ȯ�� : ��׳���ũ Ŭ���̾�Ʈ�κ��� ���޵� ���� �޽�����. ����� table ���·� ��ȯ�ȴ�

��� : ������� �������� ���� ���ɵ��� ��ũ��Ʈ�� �����Ѵ�.

      

10)  SkillObject (id,level,skill,target)

id : ȣ��Ŭ�罺�� id

��ȯ�� : ����

��� : id �� �ش��ϴ� ���� target �� �ش��ϴ� �Ϳ� ���Ͽ� level ���� �ش��ϴ� � ��ų(skill) �� ����Ѵ�.

 

11)  SkillGround (id,level,skill,x,y)

id �� �ش��ϴ� ���� x.y ��ǥ�� ���Ͽ� level ���� �ش��ϴ� skill �� ����Ѵ�.

 

13)  IsMonster (id)

id : ���ӳ��� ��ü

��ȯ�� : id �� �ش��ϴ� ���� �����̸� 1�� ��ȯ�ϰ� �׷��� �ʴٸ� 0�� ��ȯ�Ѵ�.

��� : ���͸� �Ǻ��Ѵ�.

 

             14) TraceAI (string)

string : TraceAI.txt ���Ͽ� ��ϵǴ� �����̴�. ���ڿ��̿��� �Ѵ�.

��� : �������� ��ũ��Ʈ�� ���� ���¸� ����Ͽ� �м��� �̿��Ѵ�.

 

 

4- ��׳���ũ Ŭ���̾�Ʈ ���� ����� ����

             ���� ��������� Const.lua �� ���ǵǾ� �ֽ��ϴ�.

 

4-1  GetV �Լ��� ���Ǵ� ��� ����

 

V_OWNER                                   =           0                                      -- ���� ij������ ��ȣ  ��ȯ

V_POSITION                               =           1                                      -- ���� ��ġ x, y  ��ȯ

V_TYPE                                       =           2                                      -- � ��ü�ΰ�? (�̱���)

V_MOTION                                  =           3                                      -- ���� ���� ��ȯ

V_ATTACKRANGE                    =           4                                      -- ���� ���� ��ȯ (�̱���, �ӽ÷� 1��)

V_TARGET                                  =           5                                     -- �����̳� ��ų ��� ��ǥ ��ȯ

V_SKILLATTACKRANGE         =           6                                     -- ��ų ���� ���� (�̱���)

V_HOMUNTYPE                         =           7                                      -- ȣ��Ŭ�罺 ���� ��ȯ

V_HP                                            =           8                                      -- ȣ��Ŭ�罺�� �� ������ HP

V_SP                                             =           9                                      -- ȣ��Ŭ�罺�� �� ������ SP

V_MAXHP                                   =           10                                    -- ȣ��Ŭ�罺�� �� ������ �ִ� HP

V_MAXSP                                    =           11                                    -- ȣ��Ŭ�罺�� �� ������ �ִ� SP

 

 

4-2   GetV (V_MOTION, id) �� ���� ��ȯ��

 

MOTION_STAND                       =           0                                      : �� �ִ� ����

MOTION_MOVE                         =           1                                      : �̵����� ����

MOTION_ATTACK                    =          2                                      : �������� ����

MOTION_DEAD                         =          3                                      : ���� ����

MOTION_ATTACK2                  =          9                                     : �����ϴ� ����

 

 

4-3        GetV (V_HOMUNTYPE, id) �� ���� ��ȯ��

 

LIF                                                =           1                                      : ����

AMISTR                                       =           2                                      : �ƹ̽�Ʈ��

FILIR                                            =           3                                      : �ʸ���

VANILMIRTH                              =           4                                      : �ٴҹ̸���

LIF_H                                           =           5                                      : ��ȭ�� ����

AMISTR_H                                  =           6                                      : ��ȭ�� �ƹ̽�Ʈ��

FILIR_H                                       =           7                                      : ��ȭ�� �ʸ���

VANILMIRTH_H                         =           8                                      : ��ȭ�� �ٴҹ̸���

 

 

 

4-4  GetMsg (id), GetResMsg (id) �� ���ؼ� ��ȯ�Ǵ� ���̺��� ����

 

NOME_CMD                               =           0                                      -- ���ɾ���     

{���ɹ�ȣ}

            

             MOVE_CMD                                =           1                                      -- �̵�

             {���ɹ�ȣ,X��ǥ,Y��ǥ}

              

STOP_CMD                                 =           2                                      -- ����

             {���ɹ�ȣ}

 

ATTACT_OBJET_CMD                           =           3                                      -- ����

             {���ɹ�ȣ,��ǥID}

 

ATTACK_AREA_CMD              =          4                                      -- ���� ����

             {���ɹ�ȣ,X��ǥ,Y��ǥ}

 

PATROL_CMD                            =           5                                      -- ����

             {���ɹ�ȣ,X��ǥ,Y��ǥ}

            

HOLD_CMD                                =           6                                      -- ���

             {���ɹ�ȣ}

 

SKILL_OBJECT_CMD                =           7                                      -- ��ų���

             {���ɹ�ȣ,���÷���,����,��ǥID}

 

SKILL_AREA_CMD                    =           8                                      -- ������ų���

             {���ɹ�ȣ,���÷���,����,X��ǥ,Y��ǥ}

 

FOLLOW_CMD                           =           9                                      -- ������ ���� �ٴѴ�

             {���ɹ�ȣ}

 

 

 

5- �⺻������ ������ ��ũ��Ʈ ����

 

5-1 �ΰ����� ��ũ��Ʈ�� �ʼ� ���

 

 ï¿½ï¿½Å©ï¿½ï¿½Æ® ������ �Ϲ����� �ؽ�Ʈ �����Դϴ�. �޸���� ���� �Ϲ����� ������� �ۼ��ϸ� �˴ϴ�. ���� LUA ��� ���� �������� ������ Ȯ���ڿ� lua �� ����Ͽ����ϴ�.

 

 È£ï¿½ï¿½Å¬ï¿½ç½º ������� �ʼ� ������ AI.lua ���ϰ� AI.lua  ���ϳ��� ���ǵ� AI (id) �Լ� �Դϴ�. �� �� ���� �ܴ̿� ��� ���û����Դϴ�.

���� ���, ���ο� �ؽ�Ʈ ������ ����� ���� �̸��� AI.lua ��� ��ģ �Ŀ� �޸������� ���ϴ�. �׸��� �� ������

 

function              AI (myid)

 

end

 

�̷��� ���� ����, AI ������ �ִ� ���� AI.lua �� �ٸ� ���� �ű�ų� �̸��� �ٲ� �Ŀ� ���� �ۼ��� ������ �����մϴ�. �׸��� ��� Ŭ���̾�Ʈ�� �����ϸ� ����� �۵��մϴ�. ���� ȣ���� �ƹ��͵� ���ϰ� ������ �ֽ��ϴ�.

 

 

5-2 ���� ���� ���

 

 ï¿½Î°ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ �ۼ��ϴ� ����� ���� ������ �ֽ��ϴ�. �� �߿��� �ܼ��ϸ鼭, ���� ���̴� ����� ���ѻ��±��(FSM, Finite State Machine)�Դϴ�.

���ѻ��±���� �м��� ���Ǵ� ���� ������ ���� ���� �ְڽ��ϴٸ���, ��������ε� ��κ��� ������� �˰� �ִ� ���Դϴ�.

 

�츮�� ������ ȣ��Ŭ�罺�� ���� ����. �켱 ȣ��Ŭ�罺�� ��� �ൿ�Ͽ� �ֱ⸦ �ٶ�� �ٰ� ���� ���Դϴ�.

�̷� �͵��� ��� ������.

 

������ �����ϴ� ��ü�� ã�ư��� ȥ�����

������ ���Ͱ� ������ ���� �����ض�.. �Ǵ� ���� �ٳ�� (��ģ�� ^^;;)

�����̶� �ָ� �������� ���� ���� �Ÿ��� �����ض�

���

 

��Ȳ�� ���� ������ �䱸������ �ֽ��ϴ�.

 

�� �䱸������ ������ �Ǿ��ٸ� �츮�� ���� ȣ��Ŭ�罺�� �Ǿ �����غ��ô�.

 

������ �ƹ��� ���Ͱ� ���� ���ε� ������ �ִ� ��Ȳ�� �Ӹ� �ӿ� �׷����ϴ�. ȣ���� �׳� �޽��ϴ� �����Դϴ�.

 

������ ���ݹޱ⳪ ���� ���� �޾Ҵٸ� ������ ��ü�� ������ �ν��ϰ� �Ѿư��� �մϴ�. ���� �Ѿư��� ȣ��Ŭ�罺�� �����Դϴ�.

 

���� ���� ���� �ȿ� ������ ���������� �ϰų� ��ų�� ����մϴ�. ������ �ο�� �����Դϴ�.

 

���� �Ҹ��ϰų� �Ѿ� ���� ���� ��ŭ �ָ� �޾Ƴ������� ���� ���� ������ ���� �մϴ�. ������ ���󰡴� �����Դϴ�.

 

������ ���� �� ���� ���¸� ����  �޽�(IDLE), ����(CHASE),����(ATTACK),ȸ��(FOLLOW) ���¶�� ���Ƿ� ���մϴ�.

�׸��� �� ���¿��� � ��ȭ�� ����� ������ �ƴ� �ٸ� ���·� ��ȭ�ϴ��� �����մϴ�. �׸��� �� ���¿��� �ؾ� �� �ϵ���

���� �ݴϴ�. �� ���� ���� �˻縦 �� �߰��� �� �̰��� �׸����� �׷����� ������ �����ϴ�.

 

 

 

 

�޽�

����

����

ȸ��

1. ���� �Ⱥ���

2. ���Ҹ�

3. ����

���ݹ��� ��

���ΰ�

�����

3. ����

���ݹ��� ��

1. ������ ���� ����

2. ���� ����

1. ���Ҹ�

2. �� �Ⱥ���

���ΰ�

�־���

4.�þ߾� ��

��ġ ��ȭ

4.������

 

 

 ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ���´� �޽� �����Դϴ�. ���� ��Ȳ�� ���Կ� ���� ȣ���� ���´� ��ȭ�մϴ�. �׸��� �׶� ���� ������ �ൿ�� �ϵ��� �����ϸ� �˴ϴ�. ���� ��ȹ�� �������� �� ���� �غ� �ϰ� �������� ��ũ��Ʈ�� �ۼ��� ���ϴ�.

 

 

5-3 Util.lua

 

� �۾��� �� ��, �츮�� ������ �۾��� ���Ͽ� �������� �غ��� �Ӵϴ�.

 

ȣ��Ŭ�罺�� �ΰ������� ������� �ʼ� ����� AI.lua�� AI(id) �Լ��� ������ ������, �̸� �� ���� �������� ����� �δ� ���� �����ϴ�.

�� �������� �ַ� ���̺��̳� �Լ��� �����Դϴ�. �̰͵��� Util.lua �� �ۼ��ϰ�, AI.lua ���� �����ϵ��� �մϴ�

 

�� ������ ������ Const.lua �� �����ϵ���

require           ��./AI/Const.lua��

�� ���� �ݴϴ�.

 

� �����͵��� ������� �����ϰ� ������� ������ ���� �ڷᱸ���� �ʿ��� ��찡 �ֽ��ϴ�. ȣ��Ŭ�罺�� �ΰ������� ��쿡��

���� ���ɾ ������� �����ϰ� ���� �� �ʿ䰡 �ֽ��ϴ�.  �ڷᱸ���� �̸��� List ��� �ϰ� ��� �Լ��� �߰��մϴ�.

(Util.lua ����)

 

List.new ()                                              -- ���ο� ����Ʈ ��ȯ

List.pushleft (list, value)                                      -- list �� ������ ��� �߰�

List.pushright (list, value)                      -- list �� ������ ��� �߰�

List.popleft (list)                                    -- list �� ���� ù��° ���� ���´�

List.popright (list)                                  -- list �� ���� ù��° ���� ���´�

List.clear (list)                                                     -- list �� ����.

List.size (list)                                         -- list �� ��� �ִ� ��ҵ��� ����

 

 

���� ���̴� ��� ��� �Լ��鵵 �߰��մϴ�.

GetDistance (x1,y1,x2,y2)                      -- �� ��ǥ������ �� �Ÿ� (������)

GetDistance2 (id1, id2)                         -- �� ��ü������ �� �Ÿ� (������)

GetOwnerPosition (id)                                        -- ������ ��ġ

GetDistanceFromOwner (id)                 -- ����� �Ÿ�

IsOutOfSight (id1,id2)                           -- id1�� id2 �� ���� ���̴� �Ÿ��̸� true, ������ �ʴ� �Ÿ��̸� false �� ��ȯ�Ѵ�.

IsInAttackSight (id1,id2)                        -- id1�� �����̳� ��ų�������� id2�� ������ true, �ƴϸ� false �� ��ȯ�Ѵ�.

 

 

 

5-4 AI.lua

 

 ï¿½ï¿½ï¿½ï¿½ AI.lua �� �ۼ��� ���ϴ�. �ֺ� �ؽ�Ʈ ������ �ϳ� �����, AI.lua �� �̸��� �ٲߴϴ�. �޸������� AI.lua ������ ���ϴ�.

�� ������ ������ Const.lua , Util.lua �� �����ϵ���

require           ��./AI/Const.lua��

require           ��./AI/Util.lua��

�� ���� �ݴϴ�.

 

�Ͼ��(�Ǵ� ��İ�) �� ������ �ʼ����

function AI (myid)

 

end

 

�� �����ϴ�.

 

��������� �ϳ��� �ΰ������� �ϼ��� ���Դϴ�. ������ �ֺ� AI(myid) �Լ��� ���� �ΰ������� ����ϸ�, ���ӿ��� ȣ��Ŭ�罺�� �׳�

������ �ֽ��ϴ�. �̰��� �츮�� ��ȹ�� �ƴմϴ�.

 

��ȹ�ߴ� ��� ���¸� �����մϴ�.

 

IDLE_ST                                                    = 0 --- �޽�

FOLLOW_ST                                             = 1 --- ȸ��

CHASE_ST                                                = 2 --- ����

ATTACK_ST                                             = 3 --- ����

 

�׸��� ���� ȣ��Ŭ�罺�� ���¸� ����� �� ������ �ʿ��մϴ�. �� ȣ��Ŭ�罺�� id, �� id, ������ ��ǥ �� ����� �� �ʿ䰡 �ֽ��ϴ�.

ȣ��Ŭ�罺�� ���´� ���ʿ��� �޽� �����Դϴ�.

------------------------------------------

-- global variable

------------------------------------------

MyState                           = IDLE_ST        -- ������ ���´� �޽�

MyEnemy                                      = 0                      -- �� id

MyDestX                                      = 0                      -- ������ x

MyDestY                                      = 0                      -- ������ y

MyPatrolX                                    = 0                      -- ���� ������ x

MyPatrolY                                    = 0                      -- ���� ������ y

ResCmdList                                  = List.new()       -- ���� ���ɾ� ����Ʈ

MyID                                            = 0                      -- ȣ��Ŭ�罺 id

MySkill                                         = 0                      -- ȣ��Ŭ�罺�� ��ų

MySkillLevel                                = 0                      -- ȣ��Ŭ�罺�� ��ų ����

------------------------------------------

 

function AI (myid)

MyID = myid

 

end

 

�޽� ���¸� ó���ϴ� �Լ� OnIDLE_ST() �� �����մϴ�. �׸��� AI(myid) �Լ����� �۵��ϵ��� �����մϴ�.

 

function OnIDLE_ST ()

             local     object = GetOwnerEnemy (MyID)                                                     -- ������ ���� ã�Ƴ���.

             if (object ~= 0) then                                                                                         -- ������ ���� �ִ°�?

                           MyState = CHASE_ST                                                                       -- ������ ���� �����Ƿ� �������·� ��ȯ

                           MyEnemy = object                                                                            -- ���� �� ��ȣ�� ���

                           return                                                                                                 -- �Լ� ����

             end

 

             object = GetMyEnemy (MyID)                                                                        -- ���� ���� ã�Ƴ���.

             if (object ~= 0) then                                                                                         -- ���� ���� �ִ°�?

                           MyState = CHASE_ST                                                                       -- ���� ���� �����Ƿ� �������·� ��ȯ

                           MyEnemy = object                                                                             -- ���� �� ��ȣ�� ���

                           return

             end

 

             local distance = GetDistanceFromOwner(MyID)                                            -- ����� �Ÿ��� ��´�.

             if ( distance > 3 or distance == -1) then                                                           -- ����� �Ÿ��� 3�� �̻��̰ų�, ������ �þ� ���̸�

                           MyState = FOLLOW_ST                                                      -- ȸ�� ���·� ��ȯ

                           return;

             end

end

 

 

function AI (myid)

MyID = myid

if (MyState == IDLE_ST) then

OnIDLE_ST ()

             end

end

 

������ ���ݹްų� ���� ���� ���� ��� ���� ���·� �����մϴ�. �� �� �� �ش����� �ʴ� ��� ���ΰ��� �Ÿ��� ����ؼ� �����Ÿ� �̻� ������ ������

ȸ�� ���·� ��ȯ�մϴ�. �׷��ٸ� �������� ���ݹ޴´���, ������ ���� �ִ��� ��� ������ ��� �˱��.?

 

�������� ���ݹ޴´��� �� ������ ������ ��ü�� �߿��� ������ ���� �� ����� ������ ��찡 �ǰڽ��ϴ�. �׷��ٸ� ���Ͱ� �ƴ� �Ϲ� �÷��̾��� ij���Ͱ�

������ ������ ���� ��� �˱��? �� ij������ ������ ������ ���� �� �� �ֽ��ϴ�.

 

function GetOwnerEnemy (myid)                                                                                  -- �� ������ ���� ã�Ƴ���.

             local result = 0

             local owner  = GetV (V_OWNER,myid)                                                       -- ����

             local actors = GetActors ()                                                                              -- ���� �þ߾��� ��ü��

             local enemys = {}                                                                                            -- ������ ������ ��� ���̺�

             local index = 1                                                                                                

             local target

             for i,v in ipairs(actors) do                                                                                             -- ���� �þ߾��� ��ü���� ��� ��ȸ�Ѵ�.

                           if (v ~= owner and v ~= myid) then                                                   -- � ��ü�� ��ǥ��

                                        target = GetV (V_TARGET,v)

                                        if (target == owner) then                                                       -- ��ǥ���� �����̸�

                                                      if (IsMonster(v) == 1) then                                      -- � ��ü�� �����̸�

                                                                   enemys[index] = v                                      -- ������ ���鿡 �߰�

                                                                   index = index+1

                                                      else                                                                          -- � ��ü�� ���Ͱ� �ƴϸ�

                                                                   local motion = GetV(V_MOTION,i)          -- � ��ü�� ���� ����

                                                                   if (motion == MOTION_ATTACK or motion == MOTION_ATTACK2) then – ���ݵ����̸�

                                                                                enemys[index] = v             -- ������ ���鿡 �߰�

                                                                                index = index+1

                                                                   end

                                                     end

                                        end

                           end

             end

 

             local min_dis = 100                                                                                         -- �ּ� �Ÿ��� 100 ���� ����

             local dis

             for i,v in ipairs(enemys) do                                                                             -- ������ ������ ��� ��ȸ

                           dis = GetDistance2 (myid,v)                                                              -- ���ΰ� � ������ �Ÿ�

                           if (dis < min_dis) then                                                                        -- �Ÿ��� �ּ� �Ÿ����� ������

                                        result = v                                                                               -- ���� ���� ����

                                        min_dis = dis                                                                        -- �ּ� �Ÿ� ����

                           end

             end

            

             return result                                                                                                      -- ���� ��ȯ ��ȯ ( 0�̸� ������ ���� ���� ���̴�. )

end

 

��� ���� 0 �� �ƴ� ��� ������ ������ �ް� �ִ� ���Դϴ�.

 

 

������ ���� �ִ��� �ִ� ��� ������ ��� �Ǵ��ұ��?  ���� ȣ��Ŭ�罺�� ���͸� ���� �����ϰ� �ϰ� �ʹٸ�, ������ ���Ͱ� �ִٸ�

���� �ִٶ�� �Ǵ��ϸ� �˴ϴ�. ���� ȣ��Ŭ�罺�� ���� ���� ��츸 ȣ��Ŭ�罺�� �����ϵ��� �ϰ� �ʹٸ�, ȣ��Ŭ�罺�� �����ϴ� �����

�ִ��� �˻��ϸ� �˴ϴ�. �� �ΰ��� �� �ϳ��� ������ ����, �񼱰� ȣ��Ŭ�罺�� ���������ϴ�.

 

 

function GetMyEnemy (myid)                                                                                        -- ���� ���� ��.

             local result = 0

 

             local type = GetV (V_HOMUNTYPE,myid)                                                   -- ���� � ȣ��Ŭ�罺�ΰ�

             if (type == LIF or type == LIF_H or type == AMSTR or type == AMSTR_H) then

                           result = GetMyEnemyA (myid)                                                          -- �ñ¼±°ï¿½ï¿½ï¿½ �� � �Լ�

             elseif (type == FILIR or type == FILIR_H or type == VANILMIRTH or type == VANILMIRTH_H) then

                           result = GetMyEnemyB (myid)                                                           -- ������ �� � �Լ�

             end

             return result

end

 

 

-------------------------------------------

--  �ñ¼±°ï¿½ï¿½ï¿½ GetMyEnemy

-------------------------------------------

function GetMyEnemyA (myid)

             local result = 0

             local owner  = GetV (V_OWNER,myid)

             local actors = GetActors ()

             local enemys = {}

             local index = 1

             local target

             for i,v in ipairs(actors) do

                           if (v ~= owner and v ~= myid) then

                                        target = GetV (V_TARGET,v)                                             

                                        if (target == myid) then                                                        

                                                      enemys[index] = v                                                   -- ���� �����ϴ� ��ü�� ���� ������ ����

                                                      index = index+1

                                        end

                           end

             end

 

             local min_dis = 100

             local dis

             for i,v in ipairs(enemys) do

                           dis = GetDistance2 (myid,v)

                           if (dis < min_dis) then

                                        result = v

                                        min_dis = dis

                           end

             end

 

             return result

end

 

-------------------------------------------

--  ������ GetMyEnemy

-------------------------------------------

function GetMyEnemyB (myid)

             local result = 0

             local owner  = GetV (V_OWNER,myid)

             local actors = GetActors ()

             local enemys = {}

             local index = 1

             local type

             for i,v in ipairs(actors) do

                           if (v ~= owner and v ~= myid) then

                                        if (1 == IsMonster(v))     then

                                                      enemys[index] = v                                                   -- �ֺ��� ���͸� ���� ������ ����

                                                      index = index+1

                                        end

                           end

             end

 

             local min_dis = 100

             local dis

             for i,v in ipairs(enemys) do

                           dis = GetDistance2 (myid,v)

                           if (dis < min_dis) then

                                        result = v

                                        min_dis = dis

                           end

             end

 

             return result

end

 

 

 ï¿½ï¿½ï¿½ï¿½ ���� �޽� ���¸� ó���ϴ� ���α׷��� �Ͽ����ϴ�. �޽Ļ��¿��� ��ȯ�Ǵ� ��������, ȸ�� ���µ�

����� ������� �ۼ��ϰ� ������ ���µ鵵 ���������Դϴ�.

 

���������� ȣ��Ŭ�罺�� ������� �������� ������ �����ϵ��� �ϴ� ���� �ֽ��ϴ�.                     

���콺�� Ư����ġ�� �̵���Ű�ų� Ư�� ���͸� ���ݽ�Ű�ų�, Ű������ Ư��Ű�� ������ ���ڸ�������

������ �ֵ��� �ϰų� �ϴ� ó���Դϴ�.

 

����ڰ� ������ ������ �޽��� ���·� ��ũ��Ʈ�� ���޵˴ϴ�. �� �޽����� �ؼ��Ͽ�, Ư�������� �����ϴ�

���·� ��ȯ�����ָ� �˴ϴ�. �׷����� �޽����� �ް� �ؼ��ϴ� �κа� Ư�������� ó���ϴ� ���¸� �߰��ϰ�

����ó�� �Լ��� �߰��ϸ� �˴ϴ�. AI(myid) ���Ժο� ������ �߰��մϴ�.            

 

             MyID = myid

             local msg            = GetMsg (myid)                                        -- ���� �޾ƿ���

             local rmsg          = GetResMsg (myid)                                  -- ���� ���� �޾ƿ���

 

             ProcessCommand (msg)                                                        -- ���� ó��

            

             -- ���� ���ɾ� ����

             if msg[1] == NONE_CMD then

                           if rmsg[1] ~= NONE_CMD then

                                        if List.size(ResCmdList) < 10 then                          -- ���� ������ 10 ���� ����

                                                      List.pushright (ResCmdList,rmsg)

                                        end

                           end

             else

                           List.clear (ResCmdList)                                          -- ���ο� ������ ���� �� ���� ���� ���� ���ɵ��� ����Ѵ�.

             end

            

 

�޼����� ó���ϴ� ProcessCommand (msg) �� �� �޽��� ó���Լ��� OnMOVE_CMD (msg[2],msg[3]) ���� �߰��ϸ�,

������ ���ɼ������ ó���Լ� (���� ��� OnMOVE_CMD_ST ()) �鵵 �ۼ��մϴ�.  ���ɼ�����°� �ʿ��� ������ ���� ������ �Ϸ�� ��

���� ���� ���� �ϷḦ �˻��ϱ� ���� ���Դϴ�.

 

 

5-5 ���� ���� �˻�� TraceAI.txt  �ۼ�

 

�ϼ��� ��ũ��Ʈ ������ �������� ������ ��� ���� �� �ֽ��ϴ�. ���������� �ִ� ��ũ��Ʈ�� ��ũ��Ʈ�� Ŭ���̾�Ʈ ���α׷�����

�ؼ��� �� ���� �޽����� �������ϴ�.

 

Ŭ���̾�Ʈ ���α׷��� �������� �ʴ� ���¿��� �������� �����˻縦 �� �� �ֽ��ϴ�.

��׳���ũ ��ġ������ �ִ� lua.exe ������ ����Ŭ���ϸ� ����������Ʈ�� ���ɴϴ�.

> dofile ��./AI/AI.lua��

�� �Է��ϰ� ���͸� Ĩ�ϴ�. ���������� �ִٸ� �ش� �޽����� ��µ˴ϴ�. ���ٸ� �ƹ��͵� ��µ��� �ʽ��ϴ�.

 

�� �˻翡�� �������� ������ ������ ȣ���� �ִ� ���¿��� ������ �����ϰԵǸ� ���� �޽����� ���� ��찡 �ֽ��ϴ�.

�̶��� ���������� ������ �ִ� �������� �̵��Ͽ� �����ϰ� �ٽ� ������ �����մϴ�.

 

�������� ������ ���� ��ũ��Ʈ�� ����Ǿ� ȣ��Ŭ�罺�� �۵��Ǵ��� �������� ������ �־ ������ �������� ���� �� �ִ�. �̷��� ����

ȣ��Ŭ�罺�� ���º�ȭ�� ���� ��ġ�� ��ȭ�� ����Ͽ� �м��� �ʿ伺�� ����ϴ�.

 

���� ���,  ȣ��Ŭ�罺�� ���� �����Ͽ� ������ �� ���ķ� ������ ���� �ʴ´ٸ� ���� ���¿��� ���� ������ ������ �߻��Ѵٰ� ������ �� �ֽ��ϴ�.

 

function OnCHASE_ST ()

 

             TraceAI ("OnCHASE_ST")

 

             if (true == IsOutOfSight(MyID,MyEnemy)) then     -- ENEMY_OUTSIGHT_IN

                           MyState = IDLE_ST

                           MyEnemy = 0

                           MyDestX, MyDestY = 0,0

                           TraceAI ("CHASE_ST -> IDLE_ST : ENEMY_OUTSIGHT_IN")

                           return

             end

             if (true == IsInAttackSight(MyID,MyEnemy)) then  -- ENEMY_INATTACKSIGHT_IN

                           MyState = ATTACK_ST

                           TraceAI ("CHASE_ST -> ATTACK_ST : ENEMY_INATTACKSIGHT_IN")

                           return

             end

 

             local x, y = GetV (V_POSITION,MyEnemy)

             if (MyDestX ~= x or MyDestY ~= y) then                            -- DESTCHANGED_IN

                           MyDestX, MyDestY = GetV (V_POSITION,MyEnemy);

                           Move (MyID,MyDestX,MyDestY)

                           TraceAI ("CHASE_ST -> CHASE_ST : DESTCHANGED_IN")

                           return

             end

 

             TraceAI (string.format(��OnChase_ST end MyEnemy: %d, EnemyX : %d, EnemyY:%d, MyDestX:%d, MyDestY:%d\n��,MyEnemy,x,y,MyDestX,MyDestY))

 

end

 

���� ���� Ư�� ���� ó�� �Լ�����, �˰� ���� �������  TraceAI �־� �ݴϴ�.

�׸��� ���� ��ȭâ�� /traceai ��� ġ�� ��׳���ũ�� ��ġ�� ������ �ִ� TraceAI.txt ���Ͽ� �� ������� ��ϵ˴ϴ�.

�ٽ� /traceai �� �Է��ϸ� ����� ����ϴ�. 

� ���������� ����ϰ� ���� ���� string.format �� �̿��Ͽ� ���ڿ��� �����մϴ�.

 

 

 

 

6- ��Ÿ

             ���α׷��� ��� ��� (LUA) Ȩ������         : http://www.lua.org

             �ѱ� ��� ����Ʈ                                             : http://www.redwiki.net/wiki/wiki.php/Lua

 

 

 

7-���� ����

 

2005.09.27

1) ���ο� ������ ȣ��Ŭ�罺�� �߰��Ǿ, Const.lua �� ȣ���� ���� �κа� , AI.lua �� GetMyEnemy �Լ��� �����Ǿ����ϴ�.

����� ���� ������� ����Ͻô� ��쿡,  ���� ��� �����Ͽ���, ȣ��Ŭ�罺�� ����� �۵��մϴ�.

 

 

2005-07-19

 

1) �̵����ɰ� ������ ������ �� �ֽ��ϴ�.

ShiftŰ�� Alt Ű�� ���� ���¿��� �ٴڿ� ���콺 ������ Ŭ���� �ϸ� �̵������� ����˴ϴ�.

ShiftŰ�� Alt Ű�� ���� ���¿��� ���� ��� ���콺 ������ Ŭ���� �ϸ� ���ݸ����� ����˴ϴ�.

 

function AI(myid)

       ��

       if msg[1] == NONE_CMD then

                     if rmsg[1] ~= NONE_CMD then

                                  if List.size(ResCmdList) < 10 then

                                                List.pushright (ResCmdList,rmsg) -- ������� ����

end

                     end

       else

                     List.clear (ResCmdList)  -- ���ο� ������ �ԷµǸ� ���� ���ɵ��� �����Ѵ�. 

                     ProcessCommand (msg)  -- ���ɾ� ó��

       end

       ��

       ������ ���� �ٿ� ����, ������ ������ ��������� �����ϰ�

��������� ������ ������� ����Ʈ(ResCmdList) �� �ڿ� �߰��մϴ�.

 

function        OnIDLE_ST ()

       TraceAI ("OnIDLE_ST")

       local cmd = List.popleft(ResCmdList)

       if (cmd ~= nil) then                      

                     ProcessCommand (cmd)  -- ���� ���ɾ� ó��

                     return

       end

       ��

 

�޽Ļ���(IDLE_ST)ó������ ���� ������ɾ� ����Ʈ�� �����Ͽ�, ��������� ó���մϴ�.

� ���¿��� �޽Ļ��·� ��ȯ�Ǹ� ��������� ó���ϰ� �ϴ� �����Դϴ�.

 

function        OnMOVE_CMD (x,y)

       ��

local curX, curY = GetV (V_POSITION,MyID)

       if (math.abs(x-curX)+math.abs(y-curY) > 15) then               -- �������� ���� �Ÿ� �̻��̸� (�������� �հŸ��� ���� �ʱ� ������)

                     List.pushleft (ResCmdList,{MOVE_CMD,x,y})     -- ���� ���������� �̵��� �����Ѵ�.       

                     x = math.floor((x+curX)/2)                                      -- �߰��������� ���� �̵��Ѵ�. 

                     y = math.floor((y+curY)/2)                                                                                           --

       end

   ��

end

 

�̵������� �������� �ʹ� �ְ� �Ǹ� �������� ó������ �ʽ��ϴ�.

�׷��� ���� �������� �̵������� ������ɸ���Ʈ�� �� �տ� �־��ְ�

�߰��������� �ϴ� �̵���û�� �մϴ�.

 

2) Const.lua �� �ִ� ���ɹ�ȣ NOME_CMD ��Ÿ�� NONE_CMD �����Ͽ����ϴ�.

 

3) ����� �����  ������ �߰��Ͽ���, �⺻ �ΰ����ɰ� ����� ����� ���̸�

��ȯ�ϴ� Ű�Է°� ��ȭâ ���ɾ �߰��Ͽ����ϴ�.

����� �ΰ����� ������ �⺻������ �����ϴ� �ΰ������� ������Ʈ�� ������

���� �ʵ��� ��������ϴ�. ����� �ΰ����� ������ �ִ� �ΰ����� ��ũ��Ʈ��

�۵��ϴ� �ʿ������� AI.lua ���ϰ� AI.lua ���Ͽ� �����ϴ� AI (myid) �Լ��Դϴ�.

/ȣ������ �Ǵ� /hoai �� ��ȭâ�� �Է��ϸ� �⺻ �ΰ����ɰ� ����� �ΰ����� ���̸�

��ȯ�մϴ�. ��׳���ũ ����ڵ��� ���� ������ �ΰ� ���� ��ũ��Ʈ�� ����Ͻð���

�Ѵٸ� ���� AI ���� ���� USER_AI ������ �� ��ũ��Ʈ�� �����Ͻʽÿ�.

 

4) �����ɻ���(FOLLOW_CMD_ST)���� Alt+T (�Ǵ� ȣ��Ŭ�罺 �޴�â���� ���)�� ������

   �޽Ļ���(IDLE_ST)�� ��ȯ�ϰ� AI.lua �� funciton OnFOLLOW_CMD �� �����߽��ϴ�.