aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
blob: 7e6b1afa4ad87115a438f77c2d24be1aa77aa5c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
using System.Collections.Generic;
using System.Net;
using System.Timers;
using System;
using System.Text;

using libsecondlife;
using libsecondlife.Packets;

using OpenSim.Framework;
using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Types;
using OpenSim.Framework.Data;
using OpenSim.Framework.Utilities;

namespace SimpleApp
{
    public class MyNpcCharacter : IClientAPI
    {
        private uint movementFlag = 0;
        private short flyState = 0;
        private LLQuaternion bodyDirection = LLQuaternion.Identity;
        private short count = 0;

        public event ImprovedInstantMessage OnInstantMessage;
        public event ChatFromViewer OnChatFromViewer;
        public event RezObject OnRezObject;
        public event ModifyTerrain OnModifyTerrain;
        public event SetAppearance OnSetAppearance;
        public event StartAnim OnStartAnim;
        public event LinkObjects OnLinkObjects;
        public event RequestMapBlocks OnRequestMapBlocks;
        public event TeleportLocationRequest OnTeleportLocationRequest;

        public event GenericCall4 OnDeRezObject;
        public event GenericCall OnRegionHandShakeReply;
        public event GenericCall OnRequestWearables;
        public event GenericCall2 OnCompleteMovementToRegion;
        public event UpdateAgent OnAgentUpdate;
        public event GenericCall OnRequestAvatarsData;
        public event AddNewPrim OnAddPrim;
        public event ObjectDuplicate OnObjectDuplicate;
        public event UpdateVector OnGrapObject;
        public event ObjectSelect OnDeGrapObject;
        public event MoveObject OnGrapUpdate;

        public event UpdateShape OnUpdatePrimShape;
        public event ObjectSelect OnObjectSelect;
        public event GenericCall7 OnObjectDescription;
        public event GenericCall7 OnObjectName;
        public event UpdatePrimFlags OnUpdatePrimFlags;
        public event UpdatePrimTexture OnUpdatePrimTexture;
        public event UpdateVector OnUpdatePrimGroupPosition;
        public event UpdateVector OnUpdatePrimSinglePosition;
        public event UpdatePrimRotation OnUpdatePrimGroupRotation;
        public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation;
        public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation;
        public event UpdateVector OnUpdatePrimScale;
        public event StatusChange OnChildAgentStatus;
        public event GenericCall2 OnStopMovement;
        public event NewAvatar OnNewAvatar;
        public event GenericCall6 OnRemoveAvatar;

        public event UUIDNameRequest OnNameFromUUIDRequest;

        public event ParcelPropertiesRequest OnParcelPropertiesRequest;
        public event ParcelDivideRequest OnParcelDivideRequest;
        public event ParcelJoinRequest OnParcelJoinRequest;
        public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;

        public event ParcelSelectObjects OnParcelSelectObjects;
        public event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
        public event ObjectDeselect OnObjectDeselect;
        public event EstateOwnerMessageRequest OnEstateOwnerMessage;

        private LLUUID myID = LLUUID.Random();
        public MyNpcCharacter()
        {

        }

        public virtual LLVector3 StartPos
        {
            get { return new LLVector3(128, 100, 2); }
            set { }
        }

        public virtual LLUUID AgentId
        {
            get { return myID; }
        }

        public virtual string FirstName
        {
            get { return "Annoying"; }
        }

        public virtual string LastName
        {
            get { return "NPC"; }
        }

        public virtual void OutPacket(Packet newPack) { }
        public virtual void SendWearables(AvatarWearable[] wearables) { }
        public virtual void SendStartPingCheck(byte seq) { }
        public virtual void SendKillObject(ulong regionHandle, uint avatarLocalID) { }
        public virtual void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId) { }
        public virtual void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) { }
        public virtual void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) { }
        public virtual void SendInstantMessage(string message, LLUUID target, string fromName) { }
        public virtual void SendLayerData(float[] map) { }
        public virtual void SendLayerData(int px, int py, float[] map) { }
        public virtual void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look) { }
        public virtual void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourExternalEndPoint) { }
        public virtual AgentCircuitData RequestClientInfo() { return new AgentCircuitData(); }
        public virtual void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, IPEndPoint newRegionExternalEndPoint) { }
        public virtual void SendMapBlock(List<MapBlockData> mapBlocks) { }
        public virtual void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags) { }
        public virtual void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint regionExternalEndPoint, uint locationID, uint flags) { }
        public virtual void SendTeleportCancel() { }
        public virtual void SendTeleportLocationStart() { }
        public virtual void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance) { }

        public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, LLVector3 Pos, byte[] textureEntry) { }
        public virtual void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity) { }

        public virtual void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint) { }
        public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLQuaternion rotation, LLUUID textureID, uint flags) { }
        public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimData primData, LLVector3 pos, LLUUID textureID, uint flags) { }
        public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, LLQuaternion rotation, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID) { }
        public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID) { }
        public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation) { }

        public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items) { }
        public virtual void SendInventoryItemDetails(LLUUID ownerID, LLUUID folderID, InventoryItemBase item) { }
        public virtual void SendNameReply(LLUUID profileId, string firstname, string lastname) { }

        public virtual void SendRegionHandshake(RegionInfo regionInfo)
        {
            this.OnRegionHandShakeReply(this);
            this.OnCompleteMovementToRegion();
            this.StartMovement();
        }

        public void StartMovement()
        {
            Timer timer = new Timer();
            timer.Enabled = true;
            timer.Interval = 500;
            timer.Elapsed += new ElapsedEventHandler(this.Heartbeat);
        }

        public void Heartbeat(object sender, EventArgs e)
        {
            Encoding enc = Encoding.ASCII;

            this.OnAgentUpdate(this, movementFlag, bodyDirection);

            if (this.flyState == 0)
            {
                movementFlag = (uint)MainAvatar.ControlFlags.AGENT_CONTROL_FLY | (uint)MainAvatar.ControlFlags.AGENT_CONTROL_UP_NEG;
                flyState = 1;
            }
            else if (this.flyState == 1)
            {
                movementFlag = (uint)MainAvatar.ControlFlags.AGENT_CONTROL_FLY | (uint)MainAvatar.ControlFlags.AGENT_CONTROL_UP_POS;
                flyState = 2;
            }
            else
            {
                movementFlag = (uint)MainAvatar.ControlFlags.AGENT_CONTROL_FLY;
                flyState = 0;
            }

            if (count >= 40)
            {
                this.OnChatFromViewer(enc.GetBytes("Kind of quiet around here, isn't it! \0"), 2, new LLVector3(128, 128, 26), this.FirstName + " " + this.LastName, this.AgentId);
                count = -1;
            }

            count++;
        }
    }
}