Open sourced NatiBot

This commit is contained in:
2014-09-04 04:26:22 +01:00
parent 0c66d4a2ea
commit e4b4c631af
301 changed files with 84837 additions and 7 deletions

158
COMMANDS.txt Normal file
View File

@@ -0,0 +1,158 @@
HELP
The bot will accept teleport lures from the master and members of it's active group.
* about - Shows copyright information.
* activategroup - Sets the active group. Usage: activategroup [groupname]
* activaterole - Activates chosen role on chosen group. Usage: activaterole [role-uuid] (group-uuid)
* addtorole - Adds indicated avatar to chosen role. Usage: addtorole [avatar-uuid] [role-uuid] (group-uuid)
* agentlocations - Downloads the location of every agent in a specified region. Usage: agentlocations [regionhandle]
* allowed - Gets current parcel allowed list.
* animate - Animates the avatar with the specified animation, list system animations or show current animations. Usage: animate [uuid] | [list/show/stop]
* animations - Enables or disables automatic downloading for all visible animations Usage: animations [on/off]
* appearance - Sets the last saved appearance.
* attach - Attaches chosen item to last attachment point. Usage: attach [itemID]
* attachments - Shows a list of current attachments.
* attachmentsuuid - Shows a list of an avatar's attachments. Usage: attachmentsuuid [uuid]
* avatarinfo - Shows information about a nearby avatar. Usage: avatarinfo [firstname] [lastname]
* away - Sets the bot away from keyboard. Usage: away [on/off]
* back - Move the bot backward, a step or a determined number of seconds. Usage: back (seconds)
* backup - Saves contents of cached inventory to your hard disk. Usage: backup [to <directory>] | [abort] | [status]
* backuptext - Saves notecards of cached inventory to your hard disk. Usage: backuptext [to <directory>] | [abort] | [status]
* balance - Shows the L$ balance.
* banlist - Gets current parcel ban list.
* banuser - Ejects and bans indicated user from current parcel. Usage: banuser [uuid]
* beam - Beams at specified object or avatar. Usage: beam [uuid]/[firstname] [lastname]
* busy - Set the bot as busy. Usage: busy [on/off]
* buy - Buyes a specified object. Usage: buy [uuid]
* camerafar - Show or change the current camera distance. Usage: camerafar [distance]
* cd - Changes current inventory folder. cd [path]
* changelog - Shows the bot version and changelog.
* changeperms - Changes the permissions of an object and it's task inventory contents. Usage: changeperms [prim-uuid] (copy) (mod) (xfer)
* clienttags - Shows all known client tags and client names.
* clock - Shows current time in local, UTC, GMT and PST zones.
* clone - Clones the appareance of a nearby avatar. Usage: clone [name]
* cloneprofile - Clones another avatars profile as closely as possible. WARNING: This command will destroy your existing profile! Usage: cloneprofile [uuid]
* createclothing - Creates a new clothing with the indicated parameters. Usage: createclothing help
* createeyes - Creates new eyes with the indicated texture. Usage: createeyes [name] [uuid]
* createlm - Creates a new landmark with the current position.
* createnotecard - Creates a notecard from a text file. Usage: createnotecard filename.txt
* createskin - Creates new skin with the indicated texture. Usage: createskin [name] [face-uuid] [upper-uuid] [lower-uuid]
* crouch - Starts or stops crouching. Usage: crouch [start/stop]
* detectbots - Shows posible bot avatars.
* dilation - Shows time dilation for current sim.
* downloadanimation - Downloads requested animation by UUID Usage: downloadanimation [uuid]
* downloadsound - Downloads requested sound by UUID Usage: downloadsound [uuid]
* downloadterrain - Download the RAW terrain file for this estate. Usage: downloadterrain [timeout]
* downloadtexture - Download specified texture by UUID. Usage: downloadtexture [texture-uuid]
* dumpattachment - Exports specified avatar's attachment to the hard disk. Usage: dumpattachment [avatar-uuid] [attachment-point: RightHand,LeftHand,Skull,LeftEyeball,RightEyeball,LeftFoot,RightFoot,RightEar,LeftEar,LeftHip,RightHip,LeftUpperLeg,RightUpperLeg,RightLowerLeg,LeftLowerLeg,RightForearm,LeftForearm,Nose,RightShoulder,LeftShoulder,RightPec,LeftPec,Chin,RightUpperArm,LeftUpperArm,Spine,Chest,Pelvis,Stomach,Mouth]
* dumpattachments - Exports all the attachments of an avatar. Usage: dumpattachments [uuid]
* dumpoutfit - Dumps all of the textures from an avatars outfit to the hard drive. Usage: dumpoutfit [avatar-uuid]
* echoMaster - Repeat everything that the master says.
* ejectuser - Ejects indicated user from current parcel. Usage: ejectuser [uuid]
* emptylostandfound - Empty the Lost & Found folder contents.
* emptytrash - Empty the trash folder contents.
* endfriendship - Ends friendship with given avatar. Usage: endfriendship [name] [lastname] | [uuid]
* export - Exports an object to a xml file. Usage: export [uuid] [outputfile.xml]
* exportoutfit - Exports an avatars outfit to an xml file. Usage: exportoutfit [avataruuid] outputfile.xml
* exportparticles - Reverse engineers an object's particle system to an LSL script. Usage: exportparticles [uuid]
* findobjects - Finds all objects, which name contains search-string. Usage: findobjects [radius] [search-string]
* findsim - Searches for a simulator and returns information about it. Usage: findsim [Simulator Name]
* findtexture - Checks if a specified texture is currently visible on a specified face. Usage: findtexture [face-index] [texture-uuid]
* fly - Starts or stops flying. Usage: fly [start/stop]
* flyto - Fly the avatar toward the specified position for a maximum of seconds. Usage: flyto x y z (seconds)
* follow - Follows another avatar. Usage: follow {[firstname] [lastname]|me|stop}) Use "me" to make it follow you, "stop" to stop following.
* forward - Move the bot forward, a step or a determined number of seconds. Usage: forward (seconds)
* friends - Shows bot's friends.
* gc - Starts a garbage collection.
* gesture - Makes the bot play the specified gesture. Usage: gesture [uuid]
* give - Give items of the current folder to an avatar. Usage: give [agent uuid] [item1] (item2) (item3) (...)
* gohome - Teleports home.
* goto - Goes to a sim using a teleport. Usage: goto sim/x/y/z
* gotolm - Goes to a landmark destination using a teleport. Usage: gotolm [uuid]
* gridlayer - Downloads all the grid map layers.
* gridmap - Downloads all visible information from the grid map.
* groupeject - Ejects a member of a group. Usage: groupeject [avatarid] (groupid)
* groupmembers - Shows group members. Usage: groupmembers GroupName
* grouproles - Shows group roles. Usage: grouproles GroupName
* groups - Shows groups the bot belongs to.
* gsit - Sits on ground. Use stand command to stand up.
* health - Shows current health.
* help - Shows the available commands.
* help2nc - Creates a notecard with the help and sends it to the master.
* i - Shows and caches the inventory.
* im - Sends an instant message. Usage: im [firstname] [lastname] [message]
* imgroup - Sends an instant message to a group. Usage: imgroup [group_uuid] [message]
* import - Imports prims from a XML file. Usage: import [filename] (usegroup)
* informfriend - Enables saying when a friend goes online or offline. Usage: informfriend [on/off]
* invitegroup - Invites avatar to current group at chosen role or to the default one. Usage: invite [av-uuid] (role-uuid)
* joingroup - Joins a group. Usage: joingroup [groupname] | joingroup [uuid]
* jump - Jumps.
* key2name - Returns the name of an avatar using its UUID. Usage: key2name [uuid]
* leavegroup - Leaves a group. Usage: leavegroup [groupname]
* left - Move the bot to the left, a step or a determined number of seconds. Usage: left (seconds)
* load - Loads commands from a DLL. Usage: load [assembly.dll]
* location - Shows current location.
* logout - Logouts current avatars. Usage: logout [yes]
* lookat - Looks at specified object or avatar. Usage: lookat [uuid]/[firstname] [lastname]
* ls - List the contents of the current inventory folder. Usage: ls ( -l )
* mapfriend - Finds a friend. Usage: mapfriend [uuid]
* md5 - Creates a MD5 hash from a given password. Usage: md5 [password]
* memfree - Shows currently used memory.
* moveto - Moves the avatar to the specified coordinates, avatar (by id or name), or object (by id). Usage: moveto x y z
* nadu - Sets the bot in nadu position. Usage: nadu [on/off]
* netstats - Provide packet and capabilities utilization statistics.
* objectinventory - Gets a list of an object task inventory. Usage: objectinventory [uuid]
* offerfriendship - Offers friendship to given avatar. Usage: offerfriendship [name] [lastname] | [uuid]
* parceldetails - Show details about the specified parcel. Usage: parceldetails [parcel_id]
* parcelinfo - Prints out info about all the parcels in this simulator
* pay - Pays indicated L$ amount to chosen avatar. Usage: pay [amount] [avatar-uuid]. Amount can be "all", and if avatar is ausent will be paid to master.
* pick - Creates a pick for current position. Usage: pick [description]
* playsound - Makes the bot play the specified sound. Usage: playsound [uuid]
* primcount - Shows the number of prims actually indexed.
* priminfo - Shows info about a specified prim. Usage: priminfo [prim-uuid]
* primowners - Shows a list of how many prims does a user have in a parcel. (Needs permissions) Usage: primowners [parcel_id]
* primregex - Searches for a prim using regular expressions. Usage: primregex [text predicat]
* quit - Closes Natibot and logouts all connected avatars. Usage: quit [yes]
* regioninfo - Shows information about the current region.
* rezitem - Rezzes chosen item 3m up of the bot. Usage: rezitem [itemID]
* right - Move the bot to the right, a step or a determined number of seconds. Usage: right (seconds)
* rmdir - Move an inventory folder to the Trash. Usage: rmdir [folder]
* say - Says something on general chat or option channel. Usage: say (optional channel) [message]
* script - Executes a series of commands from a given text file. Usage: script [filename]
* searchclassifieds - Searches Classified Ads. Usage: searchclassifieds [search text]
* searchevents - Search for events on the list. Usage: searchevents [search text]
* searchgroups - Searches groups. Usage: searchgroups [search text]
* searchland - Searches for land for sale, for usage information type: searchland
* searchpeople - Searches for other avatars. Usage: searchpeople [search text]
* searchplaces - Searches Places. Usage: searchplaces [search text]
* selectobjects - Shows a list of prims in parcel that belong to a specified avatar. Usage: selectobjects [parcel_id] [avatar_uuid]
* sendtp - Sends a teleport lure to the indicated avatar or to the master. Usage: sendtp (avatar-uuid)
* sethome - Establishes current location as home.
* setmaster - Changes master by name. Usage: setmaster [name]
* setMasterKey - Changes master by key. Usage: setmasterkey [uuid]
* shout - Shouts something on general chat or option channel. Usage: shout (optional channel) [message]
* showeffects - Shows the viewer effects on the console or not. Usage: showeffects [on/off]
* showevent - Shows details about an event. Usage: showevent [eventID] (use searchevents to get ID)
* sit - Sits on the nearest prim.
* siton - Sits on requested object. Usage: siton [uuid]
* sounds - Enables or disables automatic downloading for all hearable sounds Usage: textures [on/off]
* stand - Stands up.
* stats - Shows statisticals about connection.
* takeitem - Takes a specified object to the inventory. Usage: takeitem [uuid]
* taskrunning - Retrieves or set IsRunning flag on items inside an object (task inventory). Usage: taskrunning [objectID] [[scriptName] true|false]
* textures - Enables or disables automatic downloading for all viewable textures Usage: textures [on/off]
* touch - Touches a specified object. Usage: touch [uuid]
* translate - Translates given text from one language to another. Usage: translate [fromlanguage] [tolanguage] [text]
* tree - Rezzes a tree.
* turnto - Turns the bot looking to a specified point, avatar (by id or name), or object (by id). Usage: turnto [x y z]/[uuid]/[avatar]
* upload - Uploads an item to the asset. Usage: upload [inventory_name] [filename]
* uploadimage - Upload an image to the asset server. Usage: uploadimage [inventory_name] [filename]
* uploadterrain - Upload a raw terrain file to the simulator. Usage: uploadterrain [filename]
* uptime - Shows time from login.
* version - Shows NatiBot and current simulator versions.
* viewnote - Shows an inventory notecard. Usage: viewnote [uuid]
* voiceaccount - Obtain voice account info. Usage: voiceaccount
* voiceparcel - Obtain parcel voice info. Usage: voiceparcel
* wear - Wears an outfit folder from the inventory. Usage: wear [outfit] (nobake)
* whisper - Whispers something on general chat or option channel. Usage: whisper (optional channel) [message]
* who - Lists viewable agents.
* wind - Shows the local wind speed.

6
DISCLAIMER Normal file
View File

@@ -0,0 +1,6 @@
Claunia.com and/or Natalia Portillo, as well as any of their friends,
collaborators, employees, employers and/or affiliates take any
responsibility, past, present, or future, of any use of this code for
purposes that are illegal in any country.
That is the sole responsibility of the user.

Binary file not shown.

View File

@@ -0,0 +1,30 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- Select a Product Configuration -->
<InstallShieldProductConfiguration>Express</InstallShieldProductConfiguration>
<!-- Select a Visual Studio Configuration / InstallShield Release -->
<Configuration>Debug</Configuration>
<InstallShieldRelease>$(Configuration)</InstallShieldRelease>
</PropertyGroup>
<ItemGroup>
<!-- The InstallShieldProject item selects the project to build -->
<InstallShieldProject Include="$(MSBuildProjectDirectory)\$(MSBuildProjectName).isl"/>
<!-- The InstallShieldReleaseFlags sets Release Flags -->
<!--<InstallShieldReleaseFlags Include=""/>-->
<!-- The InstallShieldMergeModulePath specifies what directories are
searched for Merge Modules -->
<!--<InstallShieldMergeModulePath Include=""/>-->
</ItemGroup>
<ItemGroup>
<!-- The ProjectReference items refer to any Visual Studio solutions you want to automatically probe for Project Output Groups. -->
</ItemGroup>
<ItemGroup>
<!-- The TaggedOutputs items allow you to explicitly add extra files to output groups. Each item must include both Name and OutputGroup, as well as TargetPath metadata values. -->
<!--<TaggedOutputs Include="C:\My Test Exe.exe">
<Name>My Test Project</Name>
<OutputGroup>Primary output</OutputGroup>
<TargetPath>My Test Exe.exe</TargetPath>
</TaggedOutputs> -->
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\InstallShield\2010Limited\InstallShield.targets"/>
</Project>

1469
Installer/Installer.vdproj Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
@@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
{one line to give the program's name and a brief idea of what it does.}
Copyright (C) {year} {name of author}
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
{project} Copyright (C) {year} {fullname}
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
@@ -672,3 +672,4 @@ may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

452
LICENSE.GFDL Normal file
View File

@@ -0,0 +1,452 @@
GNU Free Documentation License
Version 1.3, 3 November 2008
Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
<http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document "free" in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The "Document", below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as "you". You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject. (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML, PostScript or PDF designed for human modification. Examples of
transparent image formats include PNG, XCF and JPG. Opaque formats
include proprietary formats that can be read and edited only by
proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
The "publisher" means any person or entity that distributes copies of
the Document to the public.
A section "Entitled XYZ" means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as "Acknowledgements",
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no
other conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to
give them a chance to provide you with an updated version of the
Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document). You may use the same title as a previous version
if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
C. State on the Title page the name of the publisher of the
Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section Entitled "History" in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on. These may be placed in the "History" section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
Preserve the Title of the section, and preserve in the section all
the substance and tone of each of the contributor acknowledgements
and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
M. Delete any section Entitled "Endorsements". Such a section
may not be included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements"
or to conflict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History"
in the various original documents, forming one section Entitled
"History"; likewise combine any sections Entitled "Acknowledgements",
and any sections Entitled "Dedications". You must delete all sections
Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other
documents released under this License, and replace the individual
copies of this License in the various documents with a single copy
that is included in the collection, provided that you follow the rules
of this License for verbatim copying of each of the documents in all
other respects.
You may extract a single document from such a collection, and
distribute it individually under this License, provided you insert a
copy of this License into the extracted document, and follow this
License in all other respects regarding verbatim copying of that
document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an "aggregate" if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements",
"Dedications", or "History", the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense, or distribute it is void, and
will automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, receipt of a copy of some or all of the same material does
not give you any rights to use it.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the
GNU Free Documentation License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in
detail to address new problems or concerns. See
http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation. If the Document
specifies that a proxy can decide which future versions of this
License can be used, that proxy's public statement of acceptance of a
version permanently authorizes you to choose that version for the
Document.
11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
World Wide Web server that publishes copyrightable works and also
provides prominent facilities for anybody to edit those works. A
public wiki that anybody can edit is an example of such a server. A
"Massive Multiauthor Collaboration" (or "MMC") contained in the site
means any set of copyrightable works thus published on the MMC site.
"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
license published by Creative Commons Corporation, a not-for-profit
corporation with a principal place of business in San Francisco,
California, as well as future copyleft versions of that license
published by that same organization.
"Incorporate" means to publish or republish a Document, in whole or in
part, as part of another Document.
An MMC is "eligible for relicensing" if it is licensed under this
License, and if all works that were first published under this License
somewhere other than this MMC, and subsequently incorporated in whole or
in part into the MMC, (1) had no cover texts or invariant sections, and
(2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site
under CC-BY-SA on the same site at any time before August 1, 2009,
provided the MMC is eligible for relicensing.
ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.

977
NatiBot.sln Normal file
View File

@@ -0,0 +1,977 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NatiBot", "SLBot\NatiBot.csproj", "{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}"
ProjectSection(ProjectDependencies) = postProject
{89AC992C-5E2C-4E6B-A453-61C1DF446216} = {89AC992C-5E2C-4E6B-A453-61C1DF446216}
{F6A02431-167E-4347-BC43-65532C31CDB7} = {F6A02431-167E-4347-BC43-65532C31CDB7}
{B3FE54E9-312C-4065-9156-B597E05D2BCA} = {B3FE54E9-312C-4065-9156-B597E05D2BCA}
{19607F57-B521-4477-9DE0-F0D9B1A68BC7} = {19607F57-B521-4477-9DE0-F0D9B1A68BC7}
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34} = {455E7D70-1C85-4D7F-9F01-DC801B8B8C34}
{54B78813-5B32-4257-8CF4-5A48C90E58BC} = {54B78813-5B32-4257-8CF4-5A48C90E58BC}
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD} = {7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DllOpenJPEG", "libomv\openjpeg-dotnet\DllOpenJPEG.vcxproj", "{89AC992C-5E2C-4E6B-A453-61C1DF446216}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartIrc4net", "SmartIRC4Net\VisualStudio\2008\SmartIrc4net.csproj", "{19607F57-B521-4477-9DE0-F0D9B1A68BC7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "log4net", "log4net\src\log4net.csproj", "{F6A02431-167E-4347-BC43-65532C31CDB7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse", "libomv\OpenMetaverse\OpenMetaverse.csproj", "{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}"
ProjectSection(ProjectDependencies) = postProject
{F6A02431-167E-4347-BC43-65532C31CDB7} = {F6A02431-167E-4347-BC43-65532C31CDB7}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse.Http", "libomv\OpenMetaverse.Http\OpenMetaverse.Http.csproj", "{54B78813-5B32-4257-8CF4-5A48C90E58BC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse.StructuredData", "libomv\OpenMetaverse.StructuredData\OpenMetaverse.StructuredData.csproj", "{BED46B2C-D866-4C87-AD31-5C87D00B6E88}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverseTypes", "libomv\OpenMetaverseTypes\OpenMetaverseTypes.csproj", "{B3FE54E9-312C-4065-9156-B597E05D2BCA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HttpServer", "libomv\HttpServer\HttpServer.csproj", "{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenMetaverse.Utilities", "libomv\OpenMetaverse.Utilities\OpenMetaverse.Utilities.csproj", "{81947E6D-4614-468F-B75B-EE61736D5BAA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "clResourceEditor", "clResourceEditor\clResourceEditor.csproj", "{EAD895D3-384F-4078-9603-DAC343E0E89D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "clControls", "clControls\clControls.csproj", "{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Installer", "Installer\Installer.vdproj", "{5CFFE837-B679-4C6C-A223-97A61DD0E11A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "clUtils", "clUtils\clUtils.csproj", "{6C115EF9-F48B-4606-9361-B09E337C9705}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DebugHWKey", "DebugHWKey\DebugHWKey.csproj", "{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}"
EndProject
Project("{6141683F-8A12-4E36-9623-2EB02B2C2303}") = "InstallShield", "InstallShield\InstallShield.isproj", "{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StatsPostTest", "StatsPostTest\StatsPostTest.csproj", "{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetZip", "DotNetZip\DotNetZip.csproj", "{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NatiBotLogReader", "NatiBotLogReader\NatiBotLogReader.csproj", "{DB1A9545-2E68-4857-B776-29F62F8EA21C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
CD_ROM|Any CPU = CD_ROM|Any CPU
CD_ROM|AnyOS = CD_ROM|AnyOS
CD_ROM|Mixed Platforms = CD_ROM|Mixed Platforms
CD_ROM|Win32 = CD_ROM|Win32
CD_ROM|Win64 = CD_ROM|Win64
CD_ROM|x64 = CD_ROM|x64
CD_ROM|x86 = CD_ROM|x86
Debug|Any CPU = Debug|Any CPU
Debug|AnyOS = Debug|AnyOS
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
Debug|Win64 = Debug|Win64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
DVD-5|Any CPU = DVD-5|Any CPU
DVD-5|AnyOS = DVD-5|AnyOS
DVD-5|Mixed Platforms = DVD-5|Mixed Platforms
DVD-5|Win32 = DVD-5|Win32
DVD-5|Win64 = DVD-5|Win64
DVD-5|x64 = DVD-5|x64
DVD-5|x86 = DVD-5|x86
Release|Any CPU = Release|Any CPU
Release|AnyOS = Release|AnyOS
Release|Mixed Platforms = Release|Mixed Platforms
Release|Win32 = Release|Win32
Release|Win64 = Release|Win64
Release|x64 = Release|x64
Release|x86 = Release|x86
SingleImage|Any CPU = SingleImage|Any CPU
SingleImage|AnyOS = SingleImage|AnyOS
SingleImage|Mixed Platforms = SingleImage|Mixed Platforms
SingleImage|Win32 = SingleImage|Win32
SingleImage|Win64 = SingleImage|Win64
SingleImage|x64 = SingleImage|x64
SingleImage|x86 = SingleImage|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|Any CPU.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|AnyOS.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|Mixed Platforms.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|Mixed Platforms.Build.0 = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|Win32.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|Win64.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|x64.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|x64.Build.0 = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.CD_ROM|x86.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|Mixed Platforms.Build.0 = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|Win32.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|Win64.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|x64.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|x64.Build.0 = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|x86.ActiveCfg = Debug|x86
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Debug|x86.Build.0 = Debug|x86
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|Any CPU.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|AnyOS.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|Mixed Platforms.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|Mixed Platforms.Build.0 = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|Win32.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|Win64.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|x64.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|x64.Build.0 = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.DVD-5|x86.ActiveCfg = Debug|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|Any CPU.Build.0 = Release|Any CPU
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|AnyOS.ActiveCfg = Release|Any CPU
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|Mixed Platforms.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|Mixed Platforms.Build.0 = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|Win32.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|Win64.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|x64.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|x64.Build.0 = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|x86.ActiveCfg = Release|x86
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.Release|x86.Build.0 = Release|x86
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|Any CPU.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|AnyOS.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|Mixed Platforms.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|Mixed Platforms.Build.0 = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|Win32.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|Win64.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|x64.ActiveCfg = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|x64.Build.0 = Release|x64
{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}.SingleImage|x86.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|Any CPU.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|AnyOS.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|Mixed Platforms.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|Mixed Platforms.Build.0 = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|Win32.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|Win64.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|x64.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|x64.Build.0 = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.CD_ROM|x86.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|Any CPU.ActiveCfg = Debug|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|AnyOS.ActiveCfg = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|Win32.ActiveCfg = Debug|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|Win32.Build.0 = Debug|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|Win64.ActiveCfg = Debug|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|x64.ActiveCfg = Debug|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Debug|x86.ActiveCfg = Debug|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|Any CPU.ActiveCfg = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|AnyOS.ActiveCfg = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|Mixed Platforms.ActiveCfg = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|Mixed Platforms.Build.0 = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|Win32.ActiveCfg = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|Win64.ActiveCfg = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|x64.ActiveCfg = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|x64.Build.0 = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.DVD-5|x86.ActiveCfg = Debug|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|Any CPU.ActiveCfg = Release|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|AnyOS.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|Mixed Platforms.Build.0 = Release|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|Win32.ActiveCfg = Release|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|Win32.Build.0 = Release|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|Win64.ActiveCfg = Release|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|x64.ActiveCfg = Release|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.Release|x86.ActiveCfg = Release|Win32
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|Any CPU.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|AnyOS.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|Mixed Platforms.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|Mixed Platforms.Build.0 = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|Win32.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|Win64.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|x64.ActiveCfg = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|x64.Build.0 = Release|x64
{89AC992C-5E2C-4E6B-A453-61C1DF446216}.SingleImage|x86.ActiveCfg = Release|x64
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|AnyOS.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|Win32.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|Win64.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|Win32.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|Win64.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|x64.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Debug|x86.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|Any CPU.Build.0 = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|AnyOS.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|Win32.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|Win64.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|x64.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.Release|x86.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|AnyOS.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|Win32.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|Win64.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|x64.ActiveCfg = Release|Any CPU
{19607F57-B521-4477-9DE0-F0D9B1A68BC7}.SingleImage|x86.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|AnyOS.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|Win32.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|Win64.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|Win32.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|Win64.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|x64.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Debug|x86.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|Any CPU.Build.0 = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|AnyOS.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|Win32.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|Win64.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|x64.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.Release|x86.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|AnyOS.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|Win32.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|Win64.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|x64.ActiveCfg = Release|Any CPU
{F6A02431-167E-4347-BC43-65532C31CDB7}.SingleImage|x86.ActiveCfg = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|AnyOS.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|Mixed Platforms.Build.0 = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|Win32.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|Win64.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|x64.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.CD_ROM|x86.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|Win32.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|Win64.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|x64.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Debug|x86.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|Any CPU.Build.0 = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|AnyOS.ActiveCfg = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|Win32.ActiveCfg = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|Win64.ActiveCfg = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|x64.ActiveCfg = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.Release|x86.ActiveCfg = Release|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|Any CPU.Build.0 = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|AnyOS.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|Mixed Platforms.Build.0 = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|Win32.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|Win64.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|x64.ActiveCfg = Debug|Any CPU
{7F6BF4C6-A0EB-4A18-9968-BD3C42A7B5FD}.SingleImage|x86.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|AnyOS.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|Mixed Platforms.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|Mixed Platforms.Build.0 = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|Win32.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|Win64.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|x64.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.CD_ROM|x86.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|Win32.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|Win64.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|x64.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Debug|x86.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|Any CPU.Build.0 = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|AnyOS.ActiveCfg = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|Win32.ActiveCfg = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|Win64.ActiveCfg = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|x64.ActiveCfg = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.Release|x86.ActiveCfg = Release|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|Any CPU.Build.0 = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|AnyOS.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|Mixed Platforms.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|Mixed Platforms.Build.0 = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|Win32.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|Win64.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|x64.ActiveCfg = Debug|Any CPU
{54B78813-5B32-4257-8CF4-5A48C90E58BC}.SingleImage|x86.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|AnyOS.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|Mixed Platforms.Build.0 = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|Win32.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|Win64.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|x64.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.CD_ROM|x86.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|Win32.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|Win64.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|x64.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Debug|x86.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|Any CPU.Build.0 = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|AnyOS.ActiveCfg = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|Win32.ActiveCfg = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|Win64.ActiveCfg = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|x64.ActiveCfg = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.Release|x86.ActiveCfg = Release|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|Any CPU.Build.0 = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|AnyOS.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|Mixed Platforms.Build.0 = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|Win32.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|Win64.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|x64.ActiveCfg = Debug|Any CPU
{BED46B2C-D866-4C87-AD31-5C87D00B6E88}.SingleImage|x86.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|AnyOS.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|Mixed Platforms.Build.0 = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|Win32.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|Win64.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|x64.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.CD_ROM|x86.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|Win32.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|Win64.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|x64.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Debug|x86.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|Any CPU.Build.0 = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|AnyOS.ActiveCfg = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|Win32.ActiveCfg = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|Win64.ActiveCfg = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|x64.ActiveCfg = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.Release|x86.ActiveCfg = Release|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|Any CPU.Build.0 = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|AnyOS.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|Mixed Platforms.Build.0 = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|Win32.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|Win64.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|x64.ActiveCfg = Debug|Any CPU
{B3FE54E9-312C-4065-9156-B597E05D2BCA}.SingleImage|x86.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|AnyOS.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|Mixed Platforms.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|Mixed Platforms.Build.0 = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|Win32.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|Win64.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|x64.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.CD_ROM|x86.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Win32.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|Win64.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|x64.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Debug|x86.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|Any CPU.Build.0 = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|AnyOS.ActiveCfg = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|Win32.ActiveCfg = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|Win64.ActiveCfg = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|x64.ActiveCfg = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.Release|x86.ActiveCfg = Release|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|Any CPU.Build.0 = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|AnyOS.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|Mixed Platforms.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|Mixed Platforms.Build.0 = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|Win32.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|Win64.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|x64.ActiveCfg = Debug|Any CPU
{455E7D70-1C85-4D7F-9F01-DC801B8B8C34}.SingleImage|x86.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|AnyOS.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|Mixed Platforms.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|Mixed Platforms.Build.0 = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|Win32.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|Win64.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|x64.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.CD_ROM|x86.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|Win32.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|Win64.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|x64.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Debug|x86.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|Any CPU.Build.0 = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|AnyOS.ActiveCfg = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|Win32.ActiveCfg = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|Win64.ActiveCfg = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|x64.ActiveCfg = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.Release|x86.ActiveCfg = Release|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|Any CPU.Build.0 = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|AnyOS.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|Mixed Platforms.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|Mixed Platforms.Build.0 = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|Win32.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|Win64.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|x64.ActiveCfg = Debug|Any CPU
{81947E6D-4614-468F-B75B-EE61736D5BAA}.SingleImage|x86.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|AnyOS.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|Win32.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|Win64.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|Win32.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|Win64.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|x64.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Debug|x86.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|Any CPU.Build.0 = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|AnyOS.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|Win32.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|Win64.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|x64.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.Release|x86.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|AnyOS.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|Win32.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|Win64.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|x64.ActiveCfg = Release|Any CPU
{EAD895D3-384F-4078-9603-DAC343E0E89D}.SingleImage|x86.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|AnyOS.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|Win32.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|Win64.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|Win32.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|Win64.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|x64.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Debug|x86.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|Any CPU.Build.0 = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|AnyOS.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|Win32.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|Win64.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|x64.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.Release|x86.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|AnyOS.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|Win32.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|Win64.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|x64.ActiveCfg = Release|Any CPU
{93D3970D-9C6C-4250-BE8F-7CF974DEAB68}.SingleImage|x86.ActiveCfg = Release|Any CPU
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|Any CPU.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|Any CPU.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|AnyOS.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|AnyOS.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|Mixed Platforms.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|Mixed Platforms.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|Win32.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|Win32.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|Win64.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|Win64.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|x64.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|x64.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|x86.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.CD_ROM|x86.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|Any CPU.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|AnyOS.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|AnyOS.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|Mixed Platforms.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|Win32.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|Win64.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|Win64.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|x64.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Debug|x86.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|Any CPU.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|Any CPU.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|AnyOS.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|AnyOS.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|Mixed Platforms.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|Mixed Platforms.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|Win32.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|Win32.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|Win64.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|Win64.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|x64.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|x64.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|x86.ActiveCfg = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.DVD-5|x86.Build.0 = Debug
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|Any CPU.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|AnyOS.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|AnyOS.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|Mixed Platforms.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|Win32.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|Win64.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|Win64.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|x64.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.Release|x86.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|Any CPU.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|Any CPU.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|AnyOS.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|AnyOS.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|Mixed Platforms.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|Mixed Platforms.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|Win32.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|Win32.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|Win64.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|Win64.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|x64.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|x64.Build.0 = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|x86.ActiveCfg = Release
{5CFFE837-B679-4C6C-A223-97A61DD0E11A}.SingleImage|x86.Build.0 = Release
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|AnyOS.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|Win32.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|Win64.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|Win32.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|Win64.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|x64.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Debug|x86.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|Any CPU.Build.0 = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|AnyOS.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|Win32.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|Win64.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|x64.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.Release|x86.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|AnyOS.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|Win32.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|Win64.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|x64.ActiveCfg = Release|Any CPU
{6C115EF9-F48B-4606-9361-B09E337C9705}.SingleImage|x86.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|AnyOS.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|Win32.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|Win64.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|Win32.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|Win64.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|x64.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Debug|x86.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|Any CPU.Build.0 = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|AnyOS.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|Win32.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|Win64.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|x64.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.Release|x86.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|AnyOS.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|Win32.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|Win64.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|x64.ActiveCfg = Release|Any CPU
{C07BFFE6-B66B-47AA-A1C2-094BBAC9AF22}.SingleImage|x86.ActiveCfg = Release|Any CPU
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|Any CPU.ActiveCfg = CD_ROM|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|AnyOS.ActiveCfg = CD_ROM|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|AnyOS.Build.0 = CD_ROM|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|Mixed Platforms.ActiveCfg = CD_ROM|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|Mixed Platforms.Build.0 = CD_ROM|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|Win32.ActiveCfg = CD_ROM|Win32
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|Win32.Build.0 = CD_ROM|Win32
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|Win64.ActiveCfg = CD_ROM|Win64
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|Win64.Build.0 = CD_ROM|Win64
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|x64.ActiveCfg = CD_ROM|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.CD_ROM|x86.ActiveCfg = CD_ROM|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|Any CPU.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|AnyOS.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|AnyOS.Build.0 = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|Mixed Platforms.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|Mixed Platforms.Build.0 = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|Win32.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|Win64.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|x64.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Debug|x86.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|Any CPU.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|AnyOS.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|AnyOS.Build.0 = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|Mixed Platforms.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|Mixed Platforms.Build.0 = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|Win32.ActiveCfg = DVD-5|Win32
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|Win32.Build.0 = DVD-5|Win32
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|Win64.ActiveCfg = DVD-5|Win64
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|Win64.Build.0 = DVD-5|Win64
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|x64.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.DVD-5|x86.ActiveCfg = DVD-5|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|Any CPU.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|AnyOS.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|AnyOS.Build.0 = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|Mixed Platforms.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|Mixed Platforms.Build.0 = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|Win32.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|Win64.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|x64.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.Release|x86.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|Any CPU.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|AnyOS.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|AnyOS.Build.0 = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|Mixed Platforms.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|Mixed Platforms.Build.0 = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|Win32.ActiveCfg = SingleImage|Win32
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|Win32.Build.0 = SingleImage|Win32
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|Win64.ActiveCfg = SingleImage|Win64
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|Win64.Build.0 = SingleImage|Win64
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|x64.ActiveCfg = SingleImage|AnyOS
{8595864B-D0F6-4B1F-853D-0F38E8EE90F8}.SingleImage|x86.ActiveCfg = SingleImage|AnyOS
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|Any CPU.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|AnyOS.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|Mixed Platforms.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|Mixed Platforms.Build.0 = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|Win32.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|Win64.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|x64.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|x86.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.CD_ROM|x86.Build.0 = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|Any CPU.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|AnyOS.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|Mixed Platforms.Build.0 = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|Win32.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|Win64.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|x64.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|x86.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Debug|x86.Build.0 = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|Any CPU.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|AnyOS.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|Mixed Platforms.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|Mixed Platforms.Build.0 = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|Win32.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|Win64.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|x64.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|x86.ActiveCfg = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.DVD-5|x86.Build.0 = Debug|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|Any CPU.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|AnyOS.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|Mixed Platforms.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|Mixed Platforms.Build.0 = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|Win32.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|Win64.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|x64.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|x86.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.Release|x86.Build.0 = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|Any CPU.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|AnyOS.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|Mixed Platforms.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|Mixed Platforms.Build.0 = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|Win32.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|Win64.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|x64.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|x86.ActiveCfg = Release|x86
{8CF624A8-4FE6-41AD-8DDF-B37854E374CB}.SingleImage|x86.Build.0 = Release|x86
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|Any CPU.Build.0 = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|AnyOS.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|Mixed Platforms.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|Mixed Platforms.Build.0 = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|Win32.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|Win64.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|x64.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.CD_ROM|x86.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|AnyOS.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|Win32.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|Win64.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|x64.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Debug|x86.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|Any CPU.Build.0 = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|AnyOS.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|Mixed Platforms.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|Mixed Platforms.Build.0 = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|Win32.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|Win64.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|x64.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.DVD-5|x86.ActiveCfg = Debug|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|Any CPU.Build.0 = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|AnyOS.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|Win32.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|Win64.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|x64.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.Release|x86.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|Any CPU.Build.0 = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|AnyOS.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|Mixed Platforms.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|Mixed Platforms.Build.0 = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|Win32.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|Win64.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|x64.ActiveCfg = Release|Any CPU
{0037E22E-B40E-4D9B-8CD5-062E7E3BC1D7}.SingleImage|x86.ActiveCfg = Release|Any CPU
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|Any CPU.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|AnyOS.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|Mixed Platforms.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|Mixed Platforms.Build.0 = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|Win32.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|Win64.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|x64.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|x86.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.CD_ROM|x86.Build.0 = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|Any CPU.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|AnyOS.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|Mixed Platforms.Build.0 = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|Win32.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|Win64.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|x64.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|x86.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Debug|x86.Build.0 = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|Any CPU.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|AnyOS.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|Mixed Platforms.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|Mixed Platforms.Build.0 = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|Win32.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|Win64.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|x64.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|x86.ActiveCfg = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.DVD-5|x86.Build.0 = Debug|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|Any CPU.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|AnyOS.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|Mixed Platforms.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|Mixed Platforms.Build.0 = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|Win32.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|Win64.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|x64.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|x86.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.Release|x86.Build.0 = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|Any CPU.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|AnyOS.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|Mixed Platforms.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|Mixed Platforms.Build.0 = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|Win32.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|Win64.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|x64.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|x86.ActiveCfg = Release|x86
{DB1A9545-2E68-4857-B776-29F62F8EA21C}.SingleImage|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

8
NatiBot.userprefs Normal file
View File

@@ -0,0 +1,8 @@
<Properties>
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
<MonoDevelop.Ide.Workbench />
<MonoDevelop.Ide.DebuggingService.Breakpoints>
<BreakpointStore />
</MonoDevelop.Ide.DebuggingService.Breakpoints>
<MonoDevelop.Ide.DebuggingService.PinnedWatches />
</Properties>

2184
README.md

File diff suppressed because it is too large Load Diff

BIN
SLBot/.DS_Store vendored Normal file

Binary file not shown.

17
SLBot/AssemblyInfo.cs Normal file
View File

@@ -0,0 +1,17 @@
// Assembly SLBot, Version 1.0.0.0
[assembly: System.Reflection.AssemblyVersion("1.0.0.326")]
[assembly: System.Runtime.CompilerServices.CompilationRelaxations(8)]
[assembly: System.Reflection.AssemblyFileVersion("1.0.0.326")]
[assembly: System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)]
[assembly: System.Runtime.InteropServices.Guid("91cdd52d-0666-4245-b010-146471bbbccd")]
[assembly: System.Runtime.InteropServices.ComVisible(false)]
[assembly: System.Reflection.AssemblyTrademark("")]
[assembly: System.Reflection.AssemblyCopyright("Copyright © Claunia.com 2008-2014, All Rights Reserved")]
[assembly: System.Reflection.AssemblyProduct("NatiBot")]
[assembly: System.Reflection.AssemblyCompany("Claunia.com")]
[assembly: System.Reflection.AssemblyConfiguration("")]
[assembly: System.Reflection.AssemblyDescription("")]
[assembly: System.Reflection.AssemblyTitle("NatiBot")]

1
SLBot/Global.cs Normal file
View File

@@ -0,0 +1 @@


617
SLBot/NatiBot-mono.csproj Normal file
View File

@@ -0,0 +1,617 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectType>local</ProjectType>
<ProjectVersion>7.10.3077</ProjectVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<AssemblyName>NatiBot</AssemblyName>
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>WinExe</OutputType>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>0.0</OldToolsVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<RootNamespace>OpenMetaverse</RootNamespace>
<ProductVersion>9.0.30729</ProductVersion>
<StartupObject>bot.Program</StartupObject>
<SignAssembly>false</SignAssembly>
<AssemblyOriginatorKeyFile>natibot.snk</AssemblyOriginatorKeyFile>
<ApplicationIcon>natibot.ico</ApplicationIcon>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>..\mono-projects\bin</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugSymbols>true</DebugSymbols>
<Optimize>false</Optimize>
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
<ErrorReport>prompt</ErrorReport>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<OutputType>WinExe</OutputType>
<RootNamespace>OpenMetaverse</RootNamespace>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>..\bin\</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<WarningLevel>4</WarningLevel>
<DebugType>none</DebugType>
<ErrorReport>prompt</ErrorReport>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<UseVSHostingProcess>false</UseVSHostingProcess>
<OutputType>WinExe</OutputType>
<RootNamespace>OpenMetaverse</RootNamespace>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<Optimize>false</Optimize>
<OutputType>WinExe</OutputType>
<RootNamespace>OpenMetaverse</RootNamespace>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>..\bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<Optimize>true</Optimize>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<UseVSHostingProcess>false</UseVSHostingProcess>
<OutputType>WinExe</OutputType>
<DebugSymbols>true</DebugSymbols>
<RootNamespace>OpenMetaverse</RootNamespace>
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<OutputType>WinExe</OutputType>
<RootNamespace>OpenMetaverse</RootNamespace>
<Optimize>true</Optimize>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>..\bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
<Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<UseVSHostingProcess>false</UseVSHostingProcess>
<OutputType>WinExe</OutputType>
<DebugSymbols>true</DebugSymbols>
<RootNamespace>OpenMetaverse</RootNamespace>
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.Security" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="bot\AccountFile.cs" />
<Compile Include="bot\AttachmentCollection.cs" />
<Compile Include="bot\BotAccount.cs" />
<Compile Include="bot\BotConfig.cs" />
<Compile Include="bot\CampChair.cs" />
<Compile Include="bot\Chat.cs" />
<Compile Include="bot\Commands\Agent\AnimateCommand.cs" />
<Compile Include="bot\Commands\Agent\AppearanceCommand.cs" />
<Compile Include="bot\Commands\Agent\AttachmentsCommand.cs" />
<Compile Include="bot\Commands\Agent\BalanceCommand.cs" />
<Compile Include="bot\Commands\Agent\GiveAllCommand.cs" />
<Compile Include="bot\Commands\Agent\LocationCommand.cs" />
<Compile Include="bot\Commands\Agent\SetHomeCommand.cs" />
<Compile Include="bot\Commands\Agent\WearCommand.cs" />
<Compile Include="bot\Commands\Avatars\AttachmentsUUID.cs" />
<Compile Include="bot\Commands\Avatars\AvatarInfoCommand.cs" />
<Compile Include="bot\Commands\Avatars\CloneCommand.cs" />
<Compile Include="bot\Commands\Avatars\CloneProfileCommand.cs" />
<Compile Include="bot\Commands\Avatars\DetectBotCommand.cs" />
<Compile Include="bot\Commands\Avatars\DetectLindensCommand.cs" />
<Compile Include="bot\Commands\Avatars\ExportOutfitCommand.cs" />
<Compile Include="bot\Commands\Avatars\FriendsCommand.cs" />
<Compile Include="bot\Commands\Avatars\ImportOutfitCommand.cs" />
<Compile Include="bot\Commands\Avatars\Key2NameCommand.cs" />
<Compile Include="bot\Commands\Avatars\MapFriendCommand.cs" />
<Compile Include="bot\Commands\Avatars\WhoCommand.cs" />
<Compile Include="bot\Commands\Communication\EchoMasterCommand.cs" />
<Compile Include="bot\Commands\Communication\ImCommand.cs" />
<Compile Include="bot\Commands\Communication\SayCommand.cs" />
<Compile Include="bot\Commands\Communication\ShoutCommand.cs" />
<Compile Include="bot\Commands\Communication\WhisperCommand.cs" />
<Compile Include="bot\Commands\Download\DownloadAnimation.cs" />
<Compile Include="bot\Commands\Download\DownloadTextureCommand.cs" />
<Compile Include="bot\Commands\Download\TexturesCommand.cs" />
<Compile Include="bot\Commands\Estate\DilationCommand.cs" />
<Compile Include="bot\Commands\Estate\DownloadTerrainCommand.cs" />
<Compile Include="bot\Commands\Estate\RegionInfoCommand.cs" />
<Compile Include="bot\Commands\Estate\ShowEventDetailsCommand.cs" />
<Compile Include="bot\Commands\Estate\StatsCommand.cs" />
<Compile Include="bot\Commands\Estate\UploadRawTerrainCommand.cs" />
<Compile Include="bot\Commands\Grid\AgentLocationsCommand.cs" />
<Compile Include="bot\Commands\Grid\FindSimCommand.cs" />
<Compile Include="bot\Commands\Grid\GridLayerCommand.cs" />
<Compile Include="bot\Commands\Grid\GridMapCommand.cs" />
<Compile Include="bot\Commands\Grid\SearchEventsCommand.cs" />
<Compile Include="bot\Commands\Groups\ActivateGroupCommand.cs" />
<Compile Include="bot\Commands\Groups\GroupsCommand.cs" />
<Compile Include="bot\Commands\Groups\ImGroupCommand.cs" />
<Compile Include="bot\Commands\Groups\JoinGroupCommand.cs" />
<Compile Include="bot\Commands\Groups\LeaveGroupCommand.cs" />
<Compile Include="bot\Commands\Inventory\BackupCommand.cs" />
<Compile Include="bot\Commands\Inventory\BackupTextCommand.cs" />
<Compile Include="bot\Commands\Inventory\ChangeDirectoryCommand.cs" />
<Compile Include="bot\Commands\Inventory\CreateNotecardCommand.cs" />
<Compile Include="bot\Commands\Inventory\DeleteFolderCommand.cs" />
<Compile Include="bot\Commands\Inventory\EmptyLostAndFoundCommand.cs" />
<Compile Include="bot\Commands\Inventory\EmptyTrashCommand.cs" />
<Compile Include="bot\Commands\Inventory\GiveItemCommand.cs" />
<Compile Include="bot\Commands\Inventory\InventoryCommand.cs" />
<Compile Include="bot\Commands\Inventory\ListContentsCommand.cs" />
<Compile Include="bot\Commands\Inventory\TaskRunningCommand.cs" />
<Compile Include="bot\Commands\Inventory\UploadCommand.cs" />
<Compile Include="bot\Commands\Inventory\UploadImageCommand.cs" />
<Compile Include="bot\Commands\Inventory\ViewNotecardCommand.cs" />
<Compile Include="bot\Commands\Movement\BackCommand.cs" />
<Compile Include="bot\Commands\Movement\CameraFarCommand.cs" />
<Compile Include="bot\Commands\Movement\CrouchCommand.cs" />
<Compile Include="bot\Commands\Movement\FlyCommand.cs" />
<Compile Include="bot\Commands\Movement\FlyToCommand.cs" />
<Compile Include="bot\Commands\Movement\FollowCommand.cs" />
<Compile Include="bot\Commands\Movement\ForwardCommand.cs" />
<Compile Include="bot\Commands\Movement\GoHomeCommand.cs" />
<Compile Include="bot\Commands\Movement\GotoCommand.cs" />
<Compile Include="bot\Commands\Movement\GotoLandmarkCommand.cs" />
<Compile Include="bot\Commands\Movement\JumpCommand.cs" />
<Compile Include="bot\Commands\Movement\LeftCommand.cs" />
<Compile Include="bot\Commands\Movement\MovetoCommand.cs" />
<Compile Include="bot\Commands\Movement\RequestTeleport.cs" />
<Compile Include="bot\Commands\Movement\RightCommand.cs" />
<Compile Include="bot\Commands\Movement\StandCommand.cs" />
<Compile Include="bot\Commands\Movement\TurnToCommand.cs" />
<Compile Include="bot\Commands\Parcel\ParcelDetailsCommand.cs" />
<Compile Include="bot\Commands\Parcel\ParcelInfoCommand.cs" />
<Compile Include="bot\Commands\Parcel\ParcelPrimOwnersCommand.cs" />
<Compile Include="bot\Commands\Parcel\ParcelSelectObjectsCommand.cs" />
<Compile Include="bot\Commands\Parcel\PrimCountCommand.cs" />
<Compile Include="bot\Commands\Parcel\SearchBuildableCommand.cs" />
<Compile Include="bot\Commands\Parcel\TreeCommand.cs" />
<Compile Include="bot\Commands\Parcel\WindCommand.cs" />
<Compile Include="bot\Commands\Command.cs" />
<Compile Include="bot\Commands\Prims\ChangePermsCommand.cs" />
<Compile Include="bot\Commands\Prims\DumpAttachmentCommand.cs" />
<Compile Include="bot\Commands\Prims\DumpAttachmentsCommand.cs" />
<Compile Include="bot\Commands\Prims\ExportCommand.cs" />
<Compile Include="bot\Commands\Prims\ExportParticlesCommand.cs" />
<Compile Include="bot\Commands\Prims\FindObjectsCommand.cs" />
<Compile Include="bot\Commands\Prims\ImportCommand.cs" />
<Compile Include="bot\Commands\Prims\ObjectInventoryCommand.cs" />
<Compile Include="bot\Commands\Prims\PrimInfoCommand.cs" />
<Compile Include="bot\Commands\Prims\PrimRegexCommand.cs" />
<Compile Include="bot\Commands\Prims\SitCommand.cs" />
<Compile Include="bot\Commands\Prims\SitOnCommand.cs" />
<Compile Include="bot\Commands\Prims\TouchCommand.cs" />
<Compile Include="bot\Commands\QueuedDownloadInfo.cs" />
<Compile Include="bot\Commands\System\DebugCommand.cs" />
<Compile Include="bot\Commands\System\HelpCommand.cs" />
<Compile Include="bot\Commands\System\LoadCommand.cs" />
<Compile Include="bot\Commands\System\MD5Command.cs" />
<Compile Include="bot\Commands\System\ScriptCommand.cs" />
<Compile Include="bot\Commands\System\SetMasterCommand.cs" />
<Compile Include="bot\Commands\System\SetMasterKeyCommand.cs" />
<Compile Include="bot\Commands\System\ShowEffectsCommand.cs" />
<Compile Include="bot\Commands\System\UptimeCommand.cs" />
<Compile Include="bot\Commands\System\VersionCommand.cs" />
<Compile Include="bot\Commands\Textures\DumpOutfitCommand.cs" />
<Compile Include="bot\Commands\Textures\FindTextureCommand.cs" />
<Compile Include="bot\Commands\Voice\ParcelVoiceInfoCommand.cs" />
<Compile Include="bot\Commands\Voice\VoiceAcountCommand.cs" />
<Compile Include="bot\Config\ConfigFile.cs" />
<Compile Include="bot\Console.cs" />
<Compile Include="bot\DataGridViewClientRow.cs" />
<Compile Include="bot\GUI\frmChat.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmChat.Designer.cs">
<DependentUpon>frmChat.cs</DependentUpon>
</Compile>
<Compile Include="bot\GUI\frmAbout.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmAbout.Designer.cs">
<DependentUpon>frmAbout.cs</DependentUpon>
</Compile>
<Compile Include="bot\GUI\frmConsole.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmConsole.Designer.cs">
<DependentUpon>frmConsole.cs</DependentUpon>
</Compile>
<Compile Include="bot\GUI\frmCrasher.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmObjects.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmObjects.Designer.cs">
<DependentUpon>frmObjects.cs</DependentUpon>
</Compile>
<Compile Include="bot\GUI\frmInventory.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmInventory.Designer.cs">
<DependentUpon>frmInventory.cs</DependentUpon>
</Compile>
<Compile Include="bot\GUI\frmAddAccount.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\InterfacePlugins\libsl_Interface.cs" />
<Compile Include="bot\InstanceHandler.cs" />
<Compile Include="bot\IRCSettings.cs" />
<Compile Include="bot\license\frmCheckLicense.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\license\frmCheckLicense.Designer.cs">
<DependentUpon>frmCheckLicense.cs</DependentUpon>
</Compile>
<Compile Include="bot\license\SimpleHash.cs" />
<Compile Include="bot\license\Version.cs" />
<Compile Include="bot\Localization\clResourceManager.cs" />
<Compile Include="bot\LoginDetailList.cs" />
<Compile Include="bot\LoginDetails.cs" />
<Compile Include="bot\LoginGrid.cs" />
<Compile Include="bot\NetCom\AlertMessageEventArgs.cs" />
<Compile Include="bot\NetCom\ChatEventArgs.cs" />
<Compile Include="bot\NetCom\ChatSentEventArgs.cs" />
<Compile Include="bot\NetCom\ClientDisconnectEventArgs.cs" />
<Compile Include="bot\NetCom\ClientLoginEventArgs.cs" />
<Compile Include="bot\NetCom\InstantMessageEventArgs.cs" />
<Compile Include="bot\NetCom\InstantMessageSentEventArgs.cs" />
<Compile Include="bot\NetCom\MoneyBalanceEventArgs.cs" />
<Compile Include="bot\NetCom\NetCommunication.cs" />
<Compile Include="bot\NetCom\OverrideEventArgs.cs" />
<Compile Include="bot\NetCom\StartLocationParser.cs" />
<Compile Include="bot\NetCom\TeleportingEventArgs.cs" />
<Compile Include="bot\NetCom\TeleportStatusEventArgs.cs" />
<Compile Include="bot\Objects\ObjectsListItem.cs" />
<Compile Include="bot\Parsing.cs" />
<Compile Include="bot\Program.cs" />
<Compile Include="bot\SecondLifeBot.cs" />
<Compile Include="bot\SoftwareLoginInfo.cs" />
<Compile Include="bot\StartPosition.cs" />
<Compile Include="bot\StateManager.cs" />
<Compile Include="Global.cs" />
<Compile Include="HTTP\Commands\CommandChk.cs" />
<Compile Include="HTTP\Commands\CommandRegister.cs" />
<Compile Include="HTTP\Commands\CommandTest.cs" />
<Compile Include="HTTP\Commands\HTTPCommand.cs" />
<Compile Include="HTTP\CPL\CPLHome.cs" />
<Compile Include="HTTP\CPL\HTMLCPLCommand.cs" />
<Compile Include="HTTP\HTMLTemplates.cs" />
<Compile Include="HTTP\HTTPDaemon.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Settings.cs" />
<EmbeddedResource Include="bot.GUI.FormObjects.resources" />
<EmbeddedResource Include="bot.GUI.frmAddAccount.resources" />
<EmbeddedResource Include="bot.GUI.frmLogin.resources" />
<EmbeddedResource Include="bot.GUI.frmMain.resources" />
<EmbeddedResource Include="bot.Properties.Resources.resources" />
<EmbeddedResource Include="bot\GUI\frmCrasher.resx">
<DependentUpon>frmCrasher.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\frmInventory.resx">
<DependentUpon>frmInventory.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\frmAddAccount.resx">
<DependentUpon>frmAddAccount.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\frmMain.resx">
<DependentUpon>frmMain.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\frmObjects.resx">
<DependentUpon>frmObjects.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\license\frmCheckLicense.resx">
<DependentUpon>frmCheckLicense.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\Localization\language_en.xml" />
<EmbeddedResource Include="bot\license\changelog_en.txt" />
<EmbeddedResource Include="bot\license\changelog_es.txt" />
<EmbeddedResource Include="bot\Localization\language_es.xml" />
<EmbeddedResource Include="bot\license\changelog_ca.txt" />
<EmbeddedResource Include="bot\GUI\frmAbout.resx">
<DependentUpon>frmAbout.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\Localization\language_ca.xml" />
<EmbeddedResource Include="bot\GUI\frmChat.resx">
<DependentUpon>frmChat.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\buttons\ca\frmCheckLicense.button1.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmCheckLicense.button1.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmCheckLicense.button1.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmCheckLicense.button2.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmCheckLicense.button2.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmCheckLicense.button2.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnAbout.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnAbout.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnAbout.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnImport.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnImport.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnImport.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnObjects.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnObjects.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnObjects.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnSetMaster.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnSetMaster.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnSetMaster.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnExport.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnExport.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnExport.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnExportAll.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnExportAll.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnExportAll.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnRefresh.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnRefresh.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnRefresh.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmCheckLicense.button1.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmCheckLicense.button1.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmCheckLicense.button1.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmCheckLicense.button2.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmCheckLicense.button2.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmCheckLicense.button2.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnAbout.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnAbout.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnAbout.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnImport.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnImport.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnImport.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnObjects.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnObjects.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnObjects.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnSetMaster.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnSetMaster.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnSetMaster.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnExport.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnExport.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnExport.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnExportAll.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnExportAll.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnExportAll.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnRefresh.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnRefresh.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnRefresh.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmCheckLicense.button1.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmCheckLicense.button1.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmCheckLicense.button1.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmCheckLicense.button2.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmCheckLicense.button2.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmCheckLicense.button2.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnAbout.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnAbout.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnAbout.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnImport.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnImport.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnImport.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnObjects.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnObjects.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnObjects.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnSetMaster.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnSetMaster.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnSetMaster.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnExport.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnExport.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnExport.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnExportAll.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnExportAll.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnExportAll.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnRefresh.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnRefresh.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnRefresh.onhover.png" />
<EmbeddedResource Include="bot\GUI\frmConsole.resx">
<DependentUpon>frmConsole.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<SubType>Designer</SubType>
<Generator>ResXFileCodeGenerator</Generator>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\buttons\btnClose.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\btnClose.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\btnClose.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmAddAccounts.btnAdd.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmAddAccounts.btnAdd.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmAddAccounts.btnAdd.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmAddAccounts.btnEdit.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmAddAccounts.btnEdit.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmAddAccounts.btnEdit.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnConsole.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnConsole.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmMain.btnConsole.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnFindNext.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnFindNext.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\ca\frmObjects.btnFindNext.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmAddAccounts.btnAdd.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmAddAccounts.btnAdd.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmAddAccounts.btnAdd.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmAddAccounts.btnEdit.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmAddAccounts.btnEdit.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmAddAccounts.btnEdit.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnConsole.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnConsole.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmMain.btnConsole.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnFindNext.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnFindNext.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\en\frmObjects.btnFindNext.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmAddAccounts.btnAdd.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmAddAccounts.btnAdd.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmAddAccounts.btnAdd.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmAddAccounts.btnEdit.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmAddAccounts.btnEdit.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmAddAccounts.btnEdit.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnConsole.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnConsole.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmMain.btnConsole.onhover.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnFindNext.idle.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnFindNext.onclick.png" />
<EmbeddedResource Include="bot\GUI\buttons\es\frmObjects.btnFindNext.onhover.png" />
<EmbeddedResource Include="natibot.ico" />
<EmbeddedResource Include="natibot.png" />
<EmbeddedResource Include="natibot-mono.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="HTTP\CPL.css" />
<None Include="HTTP\Header.tpl.htm" />
<None Include="natibot.snk" />
</ItemGroup>
<ItemGroup>
<PublishFile Include="OpenMetaverseTypes">
<Visible>False</Visible>
</PublishFile>
</ItemGroup>
<ItemGroup>
<Content Include="bot\GUI\images\natibot.ico" />
<Content Include="bot\GUI\images\NatiBot.png" />
<Content Include="bot\GUI\windows\frmAbout.png" />
<Content Include="bot\GUI\windows\frmAddAccount.png" />
<Content Include="bot\GUI\windows\frmConsole.png" />
<Content Include="bot\GUI\windows\frmLicense.png" />
<Content Include="bot\GUI\windows\frmMain.png" />
<Content Include="bot\GUI\windows\frmObjects.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\mono-projects\clControls\clControls.csproj">
<Project>{6471B205-BF40-4B0D-8166-96E97368E38F}</Project>
<Name>clControls</Name>
</ProjectReference>
<ProjectReference Include="..\libomv\HttpServer\HttpServer.csproj">
<Project>{31E011D7-70C0-4DBD-A939-2FC7B0277BCD}</Project>
<Name>HttpServer</Name>
</ProjectReference>
<ProjectReference Include="..\libomv\OpenMetaverse.Http\OpenMetaverse.Http.csproj">
<Project>{071B9856-FD44-4ABC-AC8F-C6D9B85358F8}</Project>
<Name>OpenMetaverse.Http</Name>
</ProjectReference>
<ProjectReference Include="..\libomv\OpenMetaverse.StructuredData\OpenMetaverse.StructuredData.csproj">
<Project>{00BE5C71-F138-44D3-86DE-D0F544C555C6}</Project>
<Name>OpenMetaverse.StructuredData</Name>
</ProjectReference>
<ProjectReference Include="..\libomv\OpenMetaverse.Utilities\OpenMetaverse.Utilities.csproj">
<Project>{30D9B840-2CDA-4778-8FD5-9718EAAC1812}</Project>
<Name>OpenMetaverse.Utilities</Name>
</ProjectReference>
<ProjectReference Include="..\libomv\OpenMetaverseTypes\OpenMetaverseTypes.csproj">
<Project>{D6A7318D-0825-41C8-96FE-DE18E15F6913}</Project>
<Name>OpenMetaverseTypes</Name>
</ProjectReference>
<ProjectReference Include="..\libomv\OpenMetaverse\OpenMetaverse.csproj">
<Project>{4D08F132-0F89-43E5-805B-B42B6AAFEAEE}</Project>
<Name>OpenMetaverse</Name>
</ProjectReference>
<ProjectReference Include="..\log4net\src\log4net-mono.csproj">
<Project>{F6A02431-167E-4347-BC43-65532C31CDB7}</Project>
<Name>log4net-mono</Name>
</ProjectReference>
<ProjectReference Include="..\SmartIRC4Net\VisualStudio\2008\SmartIrc4net-mono.csproj">
<Project>{19607F57-B521-4477-9DE0-F0D9B1A68BC7}</Project>
<Name>SmartIrc4net-mono</Name>
</ProjectReference>
<ProjectReference Include="..\clUtils\clUtils.csproj">
<Project>{6C115EF9-F48B-4606-9361-B09E337C9705}</Project>
<Name>clUtils</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
<ProjectGuid>{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}</ProjectGuid>
<RootNamespace>OpenMetaverse</RootNamespace>
</PropertyGroup>
<ProjectExtensions>
<MonoDevelop>
<Properties InternalTargetFrameworkVersion="3.5" />
</MonoDevelop>
</ProjectExtensions>
</Project>

1486
SLBot/NatiBot.csproj Normal file

File diff suppressed because it is too large Load Diff

70
SLBot/Properties/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,70 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.21006.1
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OpenMetaverse.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OpenMetaverse.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static System.Drawing.Bitmap NatiBot {
get {
object obj = ResourceManager.GetObject("NatiBot", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="NatiBot" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\bot\GUI\images\NatiBot.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

542
SLBot/SLBot.csproj Normal file
View File

@@ -0,0 +1,542 @@
<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectType>local</ProjectType>
<ProjectVersion>7.10.3077</ProjectVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9041A815-E5DA-4B00-945E-ADC7BD2ED7B9}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<AssemblyName>SLBot</AssemblyName>
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>WinExe</OutputType>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>0.0</OldToolsVersion>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<RootNamespace>OpenMetaverse</RootNamespace>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>..\bin\</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugSymbols>true</DebugSymbols>
<NoStdLib>false</NoStdLib>
<Optimize>false</Optimize>
<WarningLevel>4</WarningLevel>
<DebugType>full</DebugType>
<ErrorReport>prompt</ErrorReport>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>..\bin\</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DefineConstants>TRACE</DefineConstants>
<DebugSymbols>false</DebugSymbols>
<NoStdLib>false</NoStdLib>
<Optimize>true</Optimize>
<WarningLevel>4</WarningLevel>
<DebugType>none</DebugType>
<ErrorReport>prompt</ErrorReport>
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
</PropertyGroup>
<ItemGroup>
<Reference Include="Meebey.SmartIrc4net, Version=0.4.0.8764, Culture=neutral, processorArchitecture=MSIL" />
<Reference Include="OpenMetaverse, Version=1.0.0.6763, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\libsl\bin\OpenMetaverse.dll</HintPath>
</Reference>
<Reference Include="OpenMetaverse.Utilities, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\libsl\bin\OpenMetaverse.Utilities.dll</HintPath>
</Reference>
<Reference Include="OpenMetaverseTypes, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\libsl\bin\OpenMetaverseTypes.dll</HintPath>
</Reference>
<Reference Include="System">
<Name>System</Name>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing">
<Name>System.Drawing</Name>
</Reference>
<Reference Include="System.Windows.Forms">
<Name>System.Windows.Forms</Name>
</Reference>
<Reference Include="System.Xml">
<Name>System.Xml</Name>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\AccountFile.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\AttachmentCollection.cs" />
<Compile Include="bot\BotAccount.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\BotConfig.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\CampChair.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ActivateGroupCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\AgentLocationsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\AnimateCommand.cs" />
<Compile Include="bot\Commands\AppearanceCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\AttachmentsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\AttachmentsUUID.cs" />
<Compile Include="bot\Commands\BackupCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\BalanceCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ChangePermsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\CloneCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\CloneProfileCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\CodeFile1.cs" />
<Compile Include="bot\Commands\DumpAttachmentCommand.cs" />
<Compile Include="bot\Commands\DumpAttachmentsCommand.cs" />
<Compile Include="bot\Commands\VersionCommand.cs" />
<Compile Include="bot\Commands\Command.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\Commands\SearchBuildableCommand.cs" />
<Compile Include="bot\Commands\Commands\SearchEventsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\CrouchCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\DebugCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\DeleteFolderCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\DetectBotCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\DetectLindensCommand.cs" />
<Compile Include="bot\Commands\DilationCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\DumpOutfitCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\EchoMasterCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ExportCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ExportOutfitCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ExportParticlesCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\FindObjectsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\FindSimCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\FindTextureCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\FlyCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\FollowCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\FriendsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\GiveAllCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\GoHomeCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\GotoCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\GotoLandmarkCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\GridLayerCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\GridMapCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\GroupsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\HelpCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ImCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ImGroupCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ImportCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ImportOutfitCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\InventoryCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\JoinGroupCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\JumpCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\LeaveGroupCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\LoadCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\LocationCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\MapFriendCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\MD5Command.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\MovetoCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ObjectInventoryCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\PacketLogCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ParcelInfoCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\PrimCountCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\PrimInfoCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\PrimRegexCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\QueuedDownloadInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\RegionInfoCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\RequestTeleport.cs" />
<Compile Include="bot\Commands\SayCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\SetHomeCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\SetMasterCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\SetMasterKeyCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ShoutCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ShowEffectsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\ShowEventDetailsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\SitCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\SitOnCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\StandCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\StatsCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\TouchCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\TreeCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\UptimeCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\WearCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\WhisperCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Commands\WhoCommand.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Config\ConfigFile.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Console.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\DataGridViewClientRow.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\GUI\frmCrasher.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\InterfacePlugins\libsl_Teleport.cs" />
<Compile Include="bot\GUI\frmInventory.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmInventory.Designer.cs">
<DependentUpon>frmInventory.cs</DependentUpon>
</Compile>
<Compile Include="bot\GUI\FormObjects.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmAddAccount.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmLogin.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\frmMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="bot\GUI\InterfacePlugins\libsl_Interface.cs" />
<Compile Include="bot\GUI\InterfacePlugins\libsl_Minimap.cs" />
<Compile Include="bot\InstanceHandler.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\IRCSettings.cs" />
<Compile Include="bot\license\License.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\license\LicenseManager.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\license\Version.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Localization\Lang.cs" />
<Compile Include="bot\Localization\Language.cs" />
<Compile Include="bot\LoginDetailList.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\LoginDetails.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\LoginGrid.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\AlertMessageEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\ChatEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\ChatSentEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\ClientDisconnectEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\ClientLoginEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\InstantMessageEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\InstantMessageSentEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\MoneyBalanceEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\NetCommunication.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\OverrideEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\StartLocationParser.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\TeleportingEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\NetCom\TeleportStatusEventArgs.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Objects\ObjectsListItem.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Parsing.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\Program.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\SecondLifeBot.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\SoftwareLoginInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\StartPosition.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="bot\StateManager.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Global.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="HTTP\Commands\CommandChk.cs" />
<Compile Include="HTTP\Commands\CommandRegister.cs" />
<Compile Include="HTTP\Commands\CommandTest.cs" />
<Compile Include="HTTP\Commands\HTTPCommand.cs" />
<Compile Include="HTTP\CPL\CPLHome.cs" />
<Compile Include="HTTP\CPL\HTMLCPLCommand.cs" />
<Compile Include="HTTP\HTMLTemplates.cs" />
<Compile Include="HTTP\HTTPDaemon.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Settings.cs" />
<EmbeddedResource Include="bot.GUI.FormObjects.resources" />
<EmbeddedResource Include="bot.GUI.frmAddAccount.resources" />
<EmbeddedResource Include="bot.GUI.frmLogin.resources" />
<EmbeddedResource Include="bot.GUI.frmMain.resources" />
<EmbeddedResource Include="bot.Properties.Resources.resources" />
<EmbeddedResource Include="bot\GUI\frmCrasher.resx">
<DependentUpon>frmCrasher.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\frmInventory.resx">
<DependentUpon>frmInventory.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\FormObjects.resx">
<DependentUpon>FormObjects.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\frmAddAccount.resx">
<DependentUpon>frmAddAccount.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="bot\GUI\frmMain.resx">
<DependentUpon>frmMain.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup>
<None Include="HTTP\CPL.css">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<None Include="HTTP\Header.tpl.htm">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>

63
SLBot/Settings.cs Normal file
View File

@@ -0,0 +1,63 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : Settings.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace Properties
{
// This class allows you to handle specific events on the settings class:
// The SettingChanging event is raised before a setting's value is changed.
// The PropertyChanged event is raised after a setting's value is changed.
// The SettingsLoaded event is raised after the setting values are loaded.
// The SettingsSaving event is raised before the setting values are saved.
internal sealed partial class Settings
{
public Settings()
{
// // To add event handlers for saving and changing settings, uncomment the lines below:
//
// this.SettingChanging += this.SettingChangingEventHandler;
//
// this.SettingsSaving += this.SettingsSavingEventHandler;
//
}
private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e)
{
// Add code to handle the SettingChangingEvent event here.
}
private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e)
{
// Add code to handle the SettingsSaving event here.
}
}
}

3
SLBot/app.config Normal file
View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>

BIN
SLBot/bot/.DS_Store vendored Normal file

Binary file not shown.

125
SLBot/bot/AccountFile.cs Normal file
View File

@@ -0,0 +1,125 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AccountFile.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Xml;
public class AccountFile
{
private string m_file;
public AccountFile(string file)
{
this.m_file = file;
}
public List<LoginDetails> Load()
{
return this.LoadXML();
}
public List<LoginDetails> LoadXML()
{
List<LoginDetails> list = new List<LoginDetails>();
if (!File.Exists(this.m_file))
{
MessageBox.Show("The file " + this.m_file + " was not found");
return list;
}
XmlDocument document = new XmlDocument();
document.Load(this.m_file);
foreach (XmlNode node in document.DocumentElement.ChildNodes)
{
try
{
LoginDetails item = new LoginDetails();
item.FirstName = node.Attributes["Firstname"].InnerText;
item.LastName = node.Attributes["Lastname"].InnerText;
item.Password = node.Attributes["Password"].InnerText;
item.MasterName = node.Attributes["MasterName"].InnerText;
item.MasterKey = (OpenMetaverse.UUID)node.Attributes["MasterKey"].InnerText;
item.StartLocation = node.Attributes["StartLocation"].InnerText;
list.Add(item);
continue;
}
catch (Exception exception)
{
bot.Console.WriteLine(exception.Message);
continue;
}
}
return list;
}
public void Save(List<LoginDetails> accounts)
{
this.SaveXML(accounts);
}
public void SaveXML(List<LoginDetails> accounts)
{
XmlDocument document = new XmlDocument();
XmlNode newChild = document.CreateElement("Accounts");
document.AppendChild(newChild);
foreach (LoginDetails details in accounts)
{
XmlNode node2 = document.CreateElement(string.Format("Account", details.FirstName, details.LastName));
XmlAttribute node = document.CreateAttribute("Firstname");
node.InnerText = details.FirstName;
node2.Attributes.Append(node);
node = document.CreateAttribute("Lastname");
node.InnerText = details.LastName;
node2.Attributes.Append(node);
node = document.CreateAttribute("Password");
node.InnerText = details.Password;
node2.Attributes.Append(node);
node = document.CreateAttribute("MasterName");
node.InnerText = details.MasterName;
node2.Attributes.Append(node);
node = document.CreateAttribute("MasterKey");
node.InnerText = details.MasterKey.ToString();
node2.Attributes.Append(node);
node = document.CreateAttribute("StartLocation");
node.InnerText = details.StartLocation;
node2.Attributes.Append(node);
newChild.AppendChild(node2);
}
document.Save(this.m_file);
}
}
}

View File

@@ -0,0 +1,92 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AttachmentCollection.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Xml;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
namespace bot
{
[XmlRoot("Attachment")]
class AttachmentCollection
{
private Dictionary<UUID, Array> prims;
public AttachmentCollection()
{
prims = new Dictionary<UUID, Array>();
}
public void Add(List<Primitive> Niggers)
{
foreach (Primitive prim in Niggers)
{
Array arr = new object[2]
{
StateToAttachmentPoint(prim.PrimData.State),
OSDParser.SerializeLLSDXmlString(prim.GetOSD())
};
this.prims.Add(prim.ID, arr);
}
}
public void Remove(UUID uuid)
{
prims.Remove(uuid);
}
public static NBAttachmentPoint StateToAttachmentPoint(uint state)
{
const uint ATTACHMENT_MASK = 0xF0;
uint fixedState = (((byte)state & ATTACHMENT_MASK) >> 4) | (((byte)state & ~ATTACHMENT_MASK) << 4);
return (NBAttachmentPoint)fixedState;
}
public Dictionary<UUID, Array> Prims
{
get
{
return this.prims;
}
set
{
this.prims = value;
}
}
}
}

260
SLBot/bot/BotAccount.cs Normal file
View File

@@ -0,0 +1,260 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : BotAccount.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot
{
using bot.NetCom;
using OpenMetaverse;
using System;
using System.Windows.Forms;
using System.Drawing;
public class BotAccount
{
private SecondLifeBot client;
private bool connecting;
private bool deleted;
//private DataGridViewClientRow gridViewRow;
private ListViewItem listItem;
private bot.LoginDetails loginDetails;
public delegate void OnDialogScriptReceivedCallback(SecondLifeBot bot,ScriptDialogEventArgs args);
public event OnDialogScriptReceivedCallback OnDialogScriptReceived;
public delegate void StatusChangeCallback(string newStatus,System.Drawing.Color color,ListViewItem item);
public event StatusChangeCallback OnStatusChange;
public delegate void MasterChangeCallback(string newMaster,ListViewItem item);
public event MasterChangeCallback OnMasterChange;
public delegate void AccountRemovedCallback(ListViewItem item);
public event AccountRemovedCallback OnAccountRemoved;
public delegate void LocationChangeCallback(string newLocation,ListViewItem item);
public event LocationChangeCallback OnLocationChanged;
public BotAccount(bot.LoginDetails loginDetails)
{
this.loginDetails = loginDetails;
}
public void LocationChange(string newLocation)
{
if (OnLocationChanged != null)
OnLocationChanged(newLocation, this.listItem);
}
public void Connect()
{
if (this.client != null)
{
this.Disconnect(true);
}
else
{
this.connecting = true;
if (OnStatusChange != null)
OnStatusChange(bot.Localization.clResourceManager.getText("botAccount.Connecting"),
System.Drawing.Color.Green, this.listItem);
//this.gridViewRow.Status = bot.Localization.clResourceManager.getText("botAccount.Connecting");
this.client = new SecondLifeBot(this);
this.client.Netcom.ClientLoginStatus += new EventHandler<ClientLoginEventArgs>(this.Netcom_ClientLoginStatus);
this.client.Netcom.ClientLoggedOut += new EventHandler(this.Netcom_ClientLoggedOut);
this.client.OnDialogScriptReceived += new SecondLifeBot.OnDialogScriptReceivedCallback(this.client_OnDialogScriptReceived);
}
}
void client_OnDialogScriptReceived(SecondLifeBot bot, ScriptDialogEventArgs args)
{
if (OnDialogScriptReceived != null)
OnDialogScriptReceived(bot, args);
}
public bool Delete()
{
this.deleted = true;
if (!this.connecting)
{
this.Disconnect(false);
if (OnAccountRemoved != null)
OnAccountRemoved(this.listItem);
//this.GridViewRow.Delete();
return true;
}
return true;
}
public void Disconnect(bool reconnect)
{
if (this.client != null)
{
this.client.Dispose();
this.client = null;
if (reconnect)
{
this.Connect();
}
}
}
private void Netcom_ClientLoggedOut(object sender, EventArgs e)
{
SecondLifeBot client = ((NetCommunication)sender).Client;
if (!this.deleted)
{
bot.Console.WriteLine(client, bot.Localization.clResourceManager.getText("botAccount.Offline"));
}
if (client == this.client)
{
if (OnStatusChange != null)
OnStatusChange(bot.Localization.clResourceManager.getText("botAccount.Offline"),
System.Drawing.Color.Red, this.listItem);
//this.gridViewRow.Status = bot.Localization.clResourceManager.getText("botAccount.Offline");
}
}
private void Netcom_ClientLoginStatus(object sender, ClientLoginEventArgs e)
{
//THREADING
if (((NetCommunication)sender).Client == this.client)
{
switch (e.Status)
{
case LoginStatus.Failed:
this.connecting = false;
if (OnStatusChange != null)
OnStatusChange(e.Message, Color.Red, this.listItem);
//this.gridViewRow.Status = e.Message;
bot.Console.WriteLine(this.client, bot.Localization.clResourceManager.getText("botAccount.LoginFailed"), e.Message);
return;
case LoginStatus.None:
return;
case LoginStatus.ConnectingToLogin:
//this.gridViewRow.Status = bot.Localization.clResourceManager.getText("botAccount.ConnectingLogin");
if (OnStatusChange != null)
OnStatusChange(bot.Localization.clResourceManager.getText("botAccount.ConnectingLogin"),
Color.White, this.listItem);
bot.Console.WriteLine(this.client, bot.Localization.clResourceManager.getText("botAccount.ConnectingLogin"));
return;
case LoginStatus.ReadingResponse:
//this.gridViewRow.Status = bot.Localization.clResourceManager.getText("botAccount.ReadingResponse");
if (OnStatusChange != null)
OnStatusChange(bot.Localization.clResourceManager.getText("botAccount.ReadingResponse"),
Color.White, this.listItem);
bot.Console.WriteLine(this.client, bot.Localization.clResourceManager.getText("botAccount.ReadingResponse"));
return;
case LoginStatus.ConnectingToSim:
//this.gridViewRow.Status = bot.Localization.clResourceManager.getText("botAccount.ConnectingRegion");
if (OnStatusChange != null)
OnStatusChange(bot.Localization.clResourceManager.getText("botAccount.ConnectingRegion"),
Color.White, this.listItem);
bot.Console.WriteLine(this.client, bot.Localization.clResourceManager.getText("botAccount.ConnectingRegion"));
return;
case LoginStatus.Redirecting:
//this.gridViewRow.Status = bot.Localization.clResourceManager.getText("botAccount.Redirecting");
if (OnStatusChange != null)
OnStatusChange(bot.Localization.clResourceManager.getText("botAccount.Redirecting"),
Color.White, this.listItem);
bot.Console.WriteLine(this.client, bot.Localization.clResourceManager.getText("botAccount.Redirecting"));
return;
case LoginStatus.Success:
this.connecting = false;
//this.gridViewRow.Status = bot.Localization.clResourceManager.getText("botAccount.Online");
if (OnStatusChange != null)
OnStatusChange(bot.Localization.clResourceManager.getText("botAccount.Online"),
Color.Green, this.listItem);
bot.Console.WriteLine(this.client, bot.Localization.clResourceManager.getText("botAccount.Online"));
if (this.deleted)
{
this.Delete();
}
return;
}
}
}
public void SetMaster(string masterName)
{
SetMaster(masterName, false);
}
public void SetMaster(string masterName, bool save)
{
if (save)
this.LoginDetails.MasterName = masterName;
if (OnMasterChange != null)
OnMasterChange(masterName, this.listItem);
//this.gridViewRow.MasterName = masterName;
}
public SecondLifeBot Client
{
get
{
return this.client;
}
}
public ListViewItem ListItem
{
get
{
return this.listItem;
}
set
{
this.listItem = value;
}
}
public bot.LoginDetails LoginDetails
{
get
{
return this.loginDetails;
}
}
}
}

161
SLBot/bot/BotConfig.cs Normal file
View File

@@ -0,0 +1,161 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : BotConfig.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot
{
using System;
using System.Xml.Serialization;
[XmlRoot("BotConfig")]
public class BotConfig
{
private CampChair lastSitposition;
private bool saveSitPosition;
private bool getTextures;
private bool getSounds;
private bool getAnimations;
private bool informFriends;
private bool touchMidnightMania;
private bool haveLuck;
private bool acceptInventoryOffers;
public CampChair LastSitposition
{
get
{
return this.lastSitposition;
}
set
{
this.lastSitposition = value;
}
}
public bool SaveSitPosition
{
get
{
return this.saveSitPosition;
}
set
{
this.saveSitPosition = value;
}
}
public bool GetTextures
{
get
{
return this.getTextures;
}
set
{
this.getTextures = value;
}
}
public bool GetSounds
{
get
{
return this.getSounds;
}
set
{
this.getSounds = value;
}
}
public bool GetAnimations
{
get
{
return this.getAnimations;
}
set
{
this.getAnimations = value;
}
}
public bool InformFriends
{
get
{
return this.informFriends;
}
set
{
this.informFriends = value;
}
}
public bool TouchMidnightMania
{
get
{
return this.touchMidnightMania;
}
set
{
this.touchMidnightMania = value;
}
}
public bool HaveLuck
{
get
{
return this.haveLuck;
}
set
{
this.haveLuck = value;
}
}
public bool AcceptInventoryOffers
{
get
{
return this.acceptInventoryOffers;
}
set
{
this.acceptInventoryOffers = value;
}
}
}
}

46
SLBot/bot/CampChair.cs Normal file
View File

@@ -0,0 +1,46 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : CampChair.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot
{
using OpenMetaverse;
using System;
using System.Xml.Serialization;
[XmlRoot("CampPosition")]
public class CampChair
{
private string location = string.Empty;
private UUID prim = UUID.Zero;
}
}

102
SLBot/bot/Chat.cs Normal file
View File

@@ -0,0 +1,102 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : Chat.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot
{
using bot.GUI;
using System;
using System.Collections.Generic;
using OpenMetaverse;
public static class Chat
{
public struct structInstantMessage
{
public SecondLifeBot client;
public InstantMessage message;
public Simulator simulator;
public DateTime timestamp;
public bool isReceived;
}
public struct structGeneralChat
{
public SecondLifeBot client;
public string message;
public ChatAudibleLevel audible;
public ChatType type;
public ChatSourceType sourceType;
public string fromName;
public UUID id;
public UUID ownerid;
public Vector3 position;
public DateTime timestamp;
}
public delegate void OnIMReceivedCallback(bot.Chat.structInstantMessage message);
public delegate void OnChatReceivedCallback(bot.Chat.structGeneralChat chat);
public static event OnIMReceivedCallback OnIMReceived;
public static event OnChatReceivedCallback OnChatReceived;
private static void BotForm_OnInputSend(SecondLifeBot client, InstantMessage im, Simulator simulator, DateTime timestamp)
{
structInstantMessage preBuffer = new structInstantMessage();
preBuffer.client = client;
preBuffer.message = im;
preBuffer.simulator = simulator;
preBuffer.timestamp = timestamp;
preBuffer.isReceived = false;
receivedIM(preBuffer);
}
public static void Initialize(frmChat mainForm)
{
mainForm.OnInputSend += new frmChat.InputSendCallback(bot.Chat.BotForm_OnInputSend);
}
public static void receivedIM(structInstantMessage preBuffer)
{
if (OnIMReceived != null)
OnIMReceived(preBuffer);
}
public static void receivedChat(structGeneralChat preBuffer)
{
if (OnChatReceived != null)
OnChatReceived(preBuffer);
}
}
}

103
SLBot/bot/ClientTags.cs Normal file
View File

@@ -0,0 +1,103 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ClientTags.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using System.Reflection;
using System.Collections.Generic;
using OpenMetaverse;
namespace bot
{
public struct ClientTag
{
public UUID _ClientID;
public string _ClientName;
public ClientTag(UUID ClientID, string ClientName)
{
_ClientID = ClientID;
_ClientName = ClientName;
}
}
public static class ClientTags
{
public readonly static ClientTag MOYMIX = new ClientTag(UUID.Parse("0bcd5f5d-a4ce-9ea4-f9e8-15132653b3d8"), "MoyMix");
public readonly static ClientTag CRYOLIFE = new ClientTag(UUID.Parse("0f6723d2-5b23-6b58-08ab-308112b33786"), "CryoLife");
public readonly static ClientTag VERTICALLIFE = new ClientTag(UUID.Parse("11ad2452-ce54-8d65-7c23-05589b59f516"), "VerticalLife");
public readonly static ClientTag GEMINI = new ClientTag(UUID.Parse("1c29480c-c608-df87-28bb-964fb64c5366"), "Gemini");
public readonly static ClientTag MEERKAT = new ClientTag(UUID.Parse("2a9a406c-f448-68f2-4e38-878f8c46c190"), "Meerkat");
public readonly static ClientTag PHOXSL = new ClientTag(UUID.Parse("2c9c1e0b-e5d1-263e-16b1-7fc6d169f3d6"), "PhoxSL");
public readonly static ClientTag VERTICALLIFE2 = new ClientTag(UUID.Parse("3ab7e2fa-9572-ef36-1a30-d855dbea4f92"), "VerticalLife");
public readonly static ClientTag SAPPHIRE = new ClientTag(UUID.Parse("4e8dcf80-336b-b1d8-ef3e-08dacf015a0f"), "Sapphire");
public readonly static ClientTag VERTICALLIFE3 = new ClientTag(UUID.Parse("58a8b7ec-1455-7162-5d96-d3c3ead2ed71"), "VerticalLife");
public readonly static ClientTag LGG = new ClientTag(UUID.Parse("5aa5c70d-d787-571b-0495-4fc1bdef1500"), "LGG proxy");
public readonly static ClientTag PSL = new ClientTag(UUID.Parse("77662f23-c77a-9b4d-5558-26b757b2144c"), "PSL");
public readonly static ClientTag KUNGFU = new ClientTag(UUID.Parse("7c4d47a3-0c51-04d1-fa47-e4f3ac12f59b"), "Kung Fu");
public readonly static ClientTag DAYOH = new ClientTag(UUID.Parse("8183e823-c443-2142-6eb6-2ab763d4f81c"), "Day Oh proxy");
public readonly static ClientTag INFINITY = new ClientTag(UUID.Parse("81b3e921-ee31-aa57-ff9b-ec1f28e41da1"), "Infinity");
public readonly static ClientTag VERTICALLIFE4 = new ClientTag(UUID.Parse("841ef25b-3b90-caf9-ea3d-5649e755db65"), "VerticalLife");
public readonly static ClientTag FAG = new ClientTag(UUID.Parse("872c0005-3095-0967-866d-11cd71115c22"), "<-- Fag");
public readonly static ClientTag BETALIFE = new ClientTag(UUID.Parse("9422e9d7-7b11-83e4-6262-4a8db4716a3b"), "BetaLife");
public readonly static ClientTag TYK3N = new ClientTag(UUID.Parse("adcbe893-7643-fd12-f61c-0b39717e2e32"), "tyk3n");
public readonly static ClientTag MERKAT2 = new ClientTag(UUID.Parse("b6820989-bf42-ff59-ddde-fd3fd3a74fe4"), "Meerkat");
public readonly static ClientTag VLIFE = new ClientTag(UUID.Parse("c252d89d-6f7c-7d90-f430-d140d2e3fbbe"), "VLife");
public readonly static ClientTag KUNGFU2 = new ClientTag(UUID.Parse("c5b570ca-bb7e-3c81-afd1-f62646b20014"), "Kung Fu");
public readonly static ClientTag RUBY = new ClientTag(UUID.Parse("ccb509cf-cc69-e569-38f1-5086c687afd1"), "Ruby");
public readonly static ClientTag EMERALD = new ClientTag(UUID.Parse("ccda2b3b-e72c-a112-e126-fee238b67218"), "Emerald");
public readonly static ClientTag RIVLIFE = new ClientTag(UUID.Parse("d3eb4a5f-aec5-4bcb-b007-cce9efe89d37"), "rivlife");
public readonly static ClientTag CRYOLIFE2 = new ClientTag(UUID.Parse("e52d21f7-3c8b-819f-a3db-65c432295dac"), "CryoLife");
public readonly static ClientTag VERTICALLIFE5 = new ClientTag(UUID.Parse("e734563e-1c31-2a35-3ed5-8552c807439f"), "VerticalLife");
public readonly static ClientTag PSL2 = new ClientTag(UUID.Parse("f3fd74a6-fee7-4b2f-93ae-ddcb5991da04"), "PSL");
public readonly static ClientTag NEILLIFE = new ClientTag(UUID.Parse("f5a48821-9a98-d09e-8d6a-50cc08ba9a47"), "NeilLife");
public readonly static ClientTag CORGI = new ClientTag(UUID.Parse("ffce04ff-5303-4909-a044-d37af7ab0b0e"), "Corgi");
/// <summary>
/// A dictionary containing all known client tags
/// </summary>
/// <returns>A dictionary containing the known client tags,
/// where the key is the tag ID, and the value is a string
/// containing the client name</returns>
public static Dictionary<UUID, string> ToDictionary()
{
Dictionary<UUID, string> dict = new Dictionary<UUID, string>();
Type type = typeof(ClientTags);
foreach (FieldInfo field in type.GetFields(BindingFlags.Public | BindingFlags.Static))
{
ClientTag _Tag = (ClientTag)field.GetValue(type);
dict.Add(_Tag._ClientID, _Tag._ClientName);
}
return dict;
}
}
}

View File

@@ -0,0 +1,140 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AnimateCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using OpenMetaverse;
using System.Collections.Generic;
using System.Text;
namespace bot.Core.Commands
{
public class AnimateCommand : bot.Commands.Command
{
private Dictionary<UUID, string> m_BuiltInAnimations = new Dictionary<UUID, string>(Animations.ToDictionary());
public AnimateCommand(SecondLifeBot SecondLifeBot)
{
Client = SecondLifeBot;
Name = "animate";
Description = bot.Localization.clResourceManager.getText("Commands.Animate.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Animate.Usage");
}
private UUID animID;
public override string Execute(string[] args, UUID fromAgentID, bool from_SL)
{
string arg;
StringBuilder result = new StringBuilder();
if (args.Length == 1)
{
arg = args[0].Trim();
if (UUID.TryParse(args[0], out animID))
{
Client.Self.AnimationStart(animID, true);
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Animate.Starting"), animID);
}
else if (arg.ToLower().Equals("list"))
{
foreach (string key in m_BuiltInAnimations.Values)
{
result.AppendLine(key);
}
}
else if (arg.ToLower().Equals("show"))
{
Client.Self.SignaledAnimations.ForEach(delegate(KeyValuePair<UUID, int> kvp)
{
if (m_BuiltInAnimations.ContainsKey(kvp.Key))
{
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Animate.SystemAnimation"), m_BuiltInAnimations[kvp.Key], kvp.Value);
}
else
{
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Animate.AssetAnimation"), kvp.Key, kvp.Value);
}
});
}
else if (args[0].ToLower() == "stop")
{
Client.Self.SignaledAnimations.ForEach(delegate(KeyValuePair<UUID, int> kvp)
{
Client.Self.AnimationStop(kvp.Key, true);
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Animate.Stopping"), kvp.Key);
});
}
else if (m_BuiltInAnimations.ContainsValue(args[0].Trim().ToUpper()))
{
foreach (var kvp in m_BuiltInAnimations)
{
if (kvp.Value.Equals(arg.ToUpper()))
{
Client.Self.AnimationStart(kvp.Key, true);
break;
}
}
}
}
else if (args.Length == 2)
{
if (args[0].ToLower() == "stop" && UUID.TryParse(args[1], out animID))
{
Client.Self.AnimationStop(animID, true);
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Animate.Stopping"), animID);
}
else if (m_BuiltInAnimations.ContainsValue(args[0].Trim().ToUpper()))
{
foreach (var kvp in m_BuiltInAnimations)
{
if (kvp.Value.Equals(args[1].ToUpper()))
{
Client.Self.AnimationStop(kvp.Key, true);
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Animate.Stopping"), kvp.Key);
break;
}
}
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Animate.Usage");
}
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Animate.Usage");
}
return result.ToString();
}
}
}

View File

@@ -0,0 +1,55 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AppearanceCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Threading;
public class AppearanceCommand : Command
{
public AppearanceCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "appearance";
base.Description = bot.Localization.clResourceManager.getText("Commands.Appearance.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
Client.Appearance.RequestSetAppearance((args.Length > 0 && args[0].Equals("rebake")));
return bot.Localization.clResourceManager.getText("Commands.Appearance.Thread");
}
}
}

View File

@@ -0,0 +1,89 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AttachCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Text;
public class AttachCommand : Command
{
private InventoryManager Manager;
private OpenMetaverse.Inventory Inventory;
public AttachCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "attach";
base.Description = bot.Localization.clResourceManager.getText("Commands.Attach.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Attach.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
if (args.Length != 1)
{
return bot.Localization.clResourceManager.getText("Commands.Attach.Usage");
}
UUID dest;
if (!UUID.TryParse(args[0], out dest))
{
return bot.Localization.clResourceManager.getText("Commands.Attach.ExpectedID");
}
Manager = Client.Inventory;
Inventory = Manager.Store;
string inventoryName = args[0];
// WARNING: Uses local copy of inventory contents, need to download them first.
List<InventoryBase> contents = Inventory.GetContents(Client.CurrentDirectory);
foreach (InventoryBase b in contents)
{
if (inventoryName == b.Name || inventoryName.ToLower() == b.UUID.ToString())
{
if (b is InventoryItem)
{
InventoryItem item = b as InventoryItem;
Client.Appearance.Attach(item, AttachmentPoint.Default);
return String.Format(bot.Localization.clResourceManager.getText("Commands.Attach.Attaching"), item.Name);
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.Attach.NotFolder"), b.Name);
}
}
}
return String.Format(bot.Localization.clResourceManager.getText("Commands.Attach.NotFound"), inventoryName);
}
}
}

View File

@@ -0,0 +1,89 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AttachmentsCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Text;
using System.Collections.Generic;
public class AttachmentsCommand : Command
{
public AttachmentsCommand(SecondLifeBot SecondLifeBot)
{
base.Client = SecondLifeBot;
base.Name = "attachments";
base.Description = bot.Localization.clResourceManager.getText("Commands.Attachments.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
StringBuilder builder = new StringBuilder();
List<Primitive> attachments = Client.Network.CurrentSim.ObjectsPrimitives.FindAll(
delegate(Primitive prim)
{
return prim.ParentID == Client.Self.LocalID;
}
);
for (int i = 0; i < attachments.Count; i++)
{
Primitive prim = attachments[i];
NBAttachmentPoint point = StateToAttachmentPoint(prim.PrimData.State);
// TODO: Fetch properties for the objects with missing property sets so we can show names
//Logger.Log(String.Format("[Attachment @ {0}] LocalID: {1} UUID: {2} Offset: {3}",
// point, prim.LocalID, prim.ID, prim.Position), Helpers.LogLevel.Info, Client);
builder.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Attachments.Attachment"),
point, prim.LocalID, prim.ID, prim.Position);
builder.AppendLine();
}
builder.AppendLine(String.Format(bot.Localization.clResourceManager.getText("Commands.Attachments.Found"), attachments.Count));
return builder.ToString();
}
public static NBAttachmentPoint StateToAttachmentPoint(uint state)
{
const uint ATTACHMENT_MASK = 0xF0;
uint fixedState = (((byte)state & ATTACHMENT_MASK) >> 4) | (((byte)state & ~ATTACHMENT_MASK) << 4);
return (NBAttachmentPoint)fixedState;
}
}
}

View File

@@ -0,0 +1,80 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AwayCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using OpenMetaverse;
public class AwayCommand : Command
{
private static readonly UUID AWAYID = new UUID("FD037134-85D4-F241-72C6-4F42164FEDEE");
public AwayCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "away";
base.Description = bot.Localization.clResourceManager.getText("Commands.Away.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Away.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length == 0)
{
if (Client.isAway)
return bot.Localization.clResourceManager.getText("Commands.Away.Afk");
else
return bot.Localization.clResourceManager.getText("Commands.Away.NotAfk");
}
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.Away.Usage");
if (args[0].ToLower() == "on")
{
Client.isAway = true;
Client.Self.AnimationStart(AWAYID, true);
return bot.Localization.clResourceManager.getText("Commands.Away.WillAfk");
}
else if (args[0].ToLower() == "off")
{
Client.isAway = false;
Client.Self.AnimationStop(AWAYID, true);
return bot.Localization.clResourceManager.getText("Commands.Away.WontAfk");
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Away.Usage");
}
}
}
}

View File

@@ -0,0 +1,67 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : BalanceCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class BalanceCommand : Command
{
public BalanceCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "balance";
base.Description = bot.Localization.clResourceManager.getText("Commands.Balance.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
System.Threading.AutoResetEvent waitBalance = new System.Threading.AutoResetEvent(false);
EventHandler<BalanceEventArgs> del = delegate(object sender, BalanceEventArgs e)
{
waitBalance.Set();
};
Client.Self.MoneyBalance += del;
Client.Self.RequestBalance();
String result = bot.Localization.clResourceManager.getText("Commands.Balance.Timeout");
if (waitBalance.WaitOne(10000, false))
{
result = String.Format(bot.Localization.clResourceManager.getText("Commands.Balance.Balance"), Client.ToString(),
Client.Self.Balance);
}
Client.Self.MoneyBalance -= del;
return result;
}
}
}

View File

@@ -0,0 +1,140 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : BeamCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using OpenMetaverse;
using System.Timers;
public class BeamCommand : Command
{
private Timer b = new Timer();
private bool doBeam;
public BeamCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "beam";
base.Description = bot.Localization.clResourceManager.getText("Commands.Beam.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Beam.Usage");
b.Elapsed += new ElapsedEventHandler(b_Elapsed);
}
void b_Elapsed(object sender, ElapsedEventArgs e)
{
doBeam = false;
b.Enabled = false;
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
UUID targetID = UUID.Zero;
string avatarName = "";
bool isGroupKey = false;
Avatar foundAv = null;
Primitive foundPrim;
Vector3d targetPosition;
doBeam = true;
b.Interval = 5000;
if (args.Length == 1)
{
if (!UUID.TryParse(args[0], out targetID))
return bot.Localization.clResourceManager.getText("Commands.Beam.Usage");
}
else if (args.Length == 2)
{
avatarName = args[0] + " " + args[1];
if (!Client.FindOneAvatar(avatarName, out targetID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.Beam.AvNotFound"), avatarName);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Beam.Usage");
}
if (targetID != UUID.Zero)
{
Client.key2Name(targetID, out avatarName, out isGroupKey);
if (isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.Beam.CannotGroup");
if (avatarName != "")
{
foundAv = Client.Network.CurrentSim.ObjectsAvatars.Find(
delegate(Avatar avatar)
{
return (avatar.Name == avatarName);
}
);
if (foundAv == null)
return String.Format(bot.Localization.clResourceManager.getText("Commands.Beam.AvNotInSim"), avatarName);
targetPosition = new Vector3d(foundAv.Position);
}
else
{
foundPrim = Client.Network.CurrentSim.ObjectsPrimitives.Find(
delegate(Primitive prim)
{
return prim.ID == targetID;
}
);
if (foundPrim == null)
return String.Format(bot.Localization.clResourceManager.getText("Commands.Beam.ObjNotInSim"), targetID);
targetPosition = new Vector3d(foundPrim.Position);
}
b.Enabled = true;
while (doBeam)
{
Client.Self.BeamEffect(Client.Self.AgentID, targetID, targetPosition, new Color4(0, 0, 0, 255), 5000.0f,
new UUID("aec29773-c421-364e-4f29-e3f633222188"));
}
if (avatarName == "")
return String.Format(bot.Localization.clResourceManager.getText("Commands.Beam.BeamObj"), targetID);
else
return String.Format(bot.Localization.clResourceManager.getText("Commands.Beam.BeamAv"), avatarName);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Beam.Usage");
}
}
}
}

View File

@@ -0,0 +1,80 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : BusyCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using OpenMetaverse;
public class BusyCommand : Command
{
private static readonly UUID BUSYID = new UUID("EFCF670C-2D18-8128-973A-034EBC806B67");
public BusyCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "busy";
base.Description = bot.Localization.clResourceManager.getText("Commands.Busy.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Busy.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length == 0)
{
if (Client.isBusy)
return bot.Localization.clResourceManager.getText("Commands.Busy.Busy");
else
return bot.Localization.clResourceManager.getText("Commands.Busy.NotBusy");
}
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.Busy.Usage");
if (args[0].ToLower() == "on")
{
Client.isBusy = true;
Client.Self.AnimationStart(BUSYID, true);
return bot.Localization.clResourceManager.getText("Commands.Busy.WillBusy");
}
else if (args[0].ToLower() == "off")
{
Client.isBusy = false;
Client.Self.AnimationStop(BUSYID, true);
return bot.Localization.clResourceManager.getText("Commands.Busy.WontBusy");
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Busy.Usage");
}
}
}
}

View File

@@ -0,0 +1,76 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GestureCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using OpenMetaverse;
using System.Collections.Generic;
using System.Text;
namespace bot.Core.Commands
{
public class GestureCommand : bot.Commands.Command
{
private Dictionary<UUID, string> m_BuiltInAnimations = new Dictionary<UUID, string>(Animations.ToDictionary());
public GestureCommand(SecondLifeBot SecondLifeBot)
{
Client = SecondLifeBot;
Name = "gesture";
Description = bot.Localization.clResourceManager.getText("Commands.Gesture.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Gesture.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool from_SL)
{
UUID gestureID = UUID.Zero;
if (args.Length == 1)
{
if (UUID.TryParse(args[0], out gestureID))
{
if (gestureID == UUID.Zero)
return bot.Localization.clResourceManager.getText("Commands.Gesture.Usage");
Client.Self.PlayGesture(gestureID);
return String.Format(bot.Localization.clResourceManager.getText("Commands.Gesture.Playing"), gestureID);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Gesture.Usage");
}
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Gesture.Usage");
}
}
}
}

View File

@@ -0,0 +1,54 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GroundSitCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using OpenMetaverse;
public class GroundSitCommand : Command
{
public GroundSitCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "gsit";
base.Description = bot.Localization.clResourceManager.getText("Commands.GroundSit.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
Client.Self.SitOnGround();
return bot.Localization.clResourceManager.getText("Commands.GroundSit.Sitting");
}
}
}

View File

@@ -0,0 +1,53 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : HealthComand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class HealthComand : Command
{
public HealthComand(SecondLifeBot SecondLifeBot)
{
base.Name = "health";
base.Description = bot.Localization.clResourceManager.getText("Commands.Health.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.Health.Health"), Client.Self.Health);
}
}
}

View File

@@ -0,0 +1,54 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : LocationCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class LocationCommand : Command
{
public LocationCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "location";
base.Description = bot.Localization.clResourceManager.getText("Commands.Location.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.Location.Location"), Client.Network.CurrentSim.ToString(),
Client.Self.SimPosition.ToString());
}
}
}

View File

@@ -0,0 +1,122 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : LookAtCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using OpenMetaverse;
using System.Timers;
public class LookAtCommand : Command
{
public LookAtCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "lookat";
base.Description = bot.Localization.clResourceManager.getText("Commands.LookAt.Description") + " " + bot.Localization.clResourceManager.getText("Commands.LookAt.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
UUID targetID = UUID.Zero;
string avatarName = "";
bool isGroupKey = false;
Avatar foundAv = null;
Primitive foundPrim;
Vector3d targetPosition;
if (args.Length == 1)
{
if (!UUID.TryParse(args[0], out targetID))
return bot.Localization.clResourceManager.getText("Commands.LookAt.Usage");
}
else if (args.Length == 2)
{
avatarName = args[0] + " " + args[1];
if (!Client.FindOneAvatar(avatarName, out targetID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.LookAt.AvNotFound"), avatarName);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.LookAt.Usage");
}
if (targetID != UUID.Zero)
{
Client.key2Name(targetID, out avatarName, out isGroupKey);
if (isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.LookAt.CannotGroup");
if (avatarName != "")
{
foundAv = Client.Network.CurrentSim.ObjectsAvatars.Find(
delegate(Avatar avatar)
{
return (avatar.Name == avatarName);
}
);
if (foundAv == null)
return String.Format(bot.Localization.clResourceManager.getText("Commands.LookAt.AvNotInSim"), avatarName);
targetPosition = new Vector3d(foundAv.Position);
}
else
{
foundPrim = Client.Network.CurrentSim.ObjectsPrimitives.Find(
delegate(Primitive prim)
{
return prim.ID == targetID;
}
);
if (foundPrim == null)
return String.Format(bot.Localization.clResourceManager.getText("Commands.LookAt.ObjNotInSim"), targetID);
targetPosition = new Vector3d(foundPrim.Position);
}
Client.Self.LookAtEffect(Client.Self.AgentID, targetID, targetPosition, LookAtType.Focus, UUID.Zero);
if (avatarName == "")
return String.Format(bot.Localization.clResourceManager.getText("Commands.LookAt.LookObj"), targetID);
else
return String.Format(bot.Localization.clResourceManager.getText("Commands.LookAt.LookAv"), avatarName);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.LookAt.Usage");
}
}
}
}

View File

@@ -0,0 +1,80 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : NaduCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using OpenMetaverse;
public class NaduCommand : Command
{
private static readonly UUID NADUID = new UUID("6C83A33E-90E4-A350-91FF-E10209BDEC97");
public NaduCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "nadu";
base.Description = bot.Localization.clResourceManager.getText("Commands.Nadu.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Nadu.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length == 0)
{
if (Client.isNadu)
return bot.Localization.clResourceManager.getText("Commands.Nadu.Nadu");
else
return bot.Localization.clResourceManager.getText("Commands.Nadu.NotNadu");
}
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.Nadu.Usage");
if (args[0].ToLower() == "on")
{
Client.isNadu = true;
Client.Self.AnimationStart(NADUID, true);
return bot.Localization.clResourceManager.getText("Commands.Nadu.WillNadu");
}
else if (args[0].ToLower() == "off")
{
Client.isNadu = false;
Client.Self.AnimationStop(NADUID, true);
return bot.Localization.clResourceManager.getText("Commands.Nadu.WontNadu");
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Nadu.Usage");
}
}
}
}

View File

@@ -0,0 +1,86 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : PayCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class PayCommand : Command
{
public PayCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "pay";
base.Description = bot.Localization.clResourceManager.getText("Commands.Pay.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Pay.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
int amount;
UUID avatarID;
string avatarName;
if (args.Length == 1)
{
avatarID = Client.MasterKey;
}
else if (args.Length == 2)
{
if (!UUID.TryParse(args[1], out avatarID))
{
return bot.Localization.clResourceManager.getText("Commands.Pay.Usage");
}
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Pay.Usage");
}
if (!Int32.TryParse(args[0], out amount))
if (args[0].ToLower().Equals("all"))
amount = Client.Self.Balance;
else
return bot.Localization.clResourceManager.getText("Commands.Pay.Usage");
if (!Client.key2Name(avatarID, out avatarName))
avatarName = avatarID.ToString();
if (amount > Client.Self.Balance)
amount = Client.Self.Balance;
Client.Self.GiveAvatarMoney(avatarID, amount, String.Format(bot.Localization.clResourceManager.getText("Commands.Pay.Message"), amount));
return String.Format(bot.Localization.clResourceManager.getText("Commands.Pay.Gave"), amount, avatarName);
}
}
}

View File

@@ -0,0 +1,65 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : PickCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using OpenMetaverse;
public class PickCommand : Command
{
public PickCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "pick";
base.Description = bot.Localization.clResourceManager.getText("Commands.Pick.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Pick.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
string description = "";
if (args.Length == 0)
return bot.Localization.clResourceManager.getText("Commands.Pick.Usage");
foreach (string arg in args)
{
description += arg;
description += " ";
}
Client.Self.PickInfoUpdate(UUID.Random(), false, UUID.Zero, bot.Localization.clResourceManager.getText("Commands.Pick.PickName"), Client.Self.GlobalPosition, UUID.Zero, description);
return bot.Localization.clResourceManager.getText("Commands.Pick.Picking");
}
}
}

View File

@@ -0,0 +1,76 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : PlaySoundCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using OpenMetaverse;
using System.Collections.Generic;
using System.Text;
namespace bot.Core.Commands
{
public class PlaySoundCommand : bot.Commands.Command
{
private Dictionary<UUID, string> m_BuiltInAnimations = new Dictionary<UUID, string>(Animations.ToDictionary());
public PlaySoundCommand(SecondLifeBot SecondLifeBot)
{
Client = SecondLifeBot;
Name = "playsound";
Description = bot.Localization.clResourceManager.getText("Commands.PlaySound.Description") + " " + bot.Localization.clResourceManager.getText("Commands.PlaySound.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool from_SL)
{
UUID soundID = UUID.Zero;
if (args.Length == 1)
{
if (UUID.TryParse(args[0], out soundID))
{
if (soundID == UUID.Zero)
return bot.Localization.clResourceManager.getText("Commands.PlaySound.Usage");
Client.Sound.PlaySound(soundID);
return String.Format(bot.Localization.clResourceManager.getText("Commands.PlaySound.Playing"), soundID);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.PlaySound.Usage");
}
}
else
{
return bot.Localization.clResourceManager.getText("Commands.PlaySound.Usage");
}
}
}
}

View File

@@ -0,0 +1,54 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : SetHomeCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class SetHomeCommand : Command
{
public SetHomeCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "sethome";
base.Description = bot.Localization.clResourceManager.getText("Commands.SetHome.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
Client.Self.SetHome();
return bot.Localization.clResourceManager.getText("Commands.SetHome.Set");
}
}
}

View File

@@ -0,0 +1,90 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : WearCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
public class WearCommand : Command
{
public WearCommand(SecondLifeBot SecondLifeBot)
{
base.Client = SecondLifeBot;
base.Name = "wear";
base.Description = bot.Localization.clResourceManager.getText("Commands.Wear.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Wear.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 1)
return bot.Localization.clResourceManager.getText("Commands.Wear.Usage");
string target = String.Empty;
bool bake = true;
for (int ct = 0; ct < args.Length; ct++)
{
target += args[ct] + " ";
}
target = target.TrimEnd();
UUID folder = Client.Inventory.FindObjectByPath(Client.Inventory.Store.RootFolder.UUID, Client.Self.AgentID, target, 20 * 1000);
if (folder == UUID.Zero)
{
return "Outfit path " + target + " not found";
}
List<InventoryBase> contents = Client.Inventory.FolderContents(folder, Client.Self.AgentID, true, true, InventorySortOrder.ByName, 20 * 1000);
List<InventoryItem> items = new List<InventoryItem>();
if (contents == null)
{
return "Failed to get contents of " + target;
}
foreach (InventoryBase item in contents)
{
if (item is InventoryItem)
items.Add((InventoryItem)item);
}
Client.Appearance.ReplaceOutfit(items);
return "Starting to change outfit to " + target;
}
}
}

View File

@@ -0,0 +1,101 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AttachmentsUUIDCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using OpenMetaverse.Utilities;
using System;
using System.Text;
using System.Collections.Generic;
public class AttachmentsUUIDCommand : Command
{
public AttachmentsUUIDCommand(SecondLifeBot SecondLifeBot)
{
base.Client = SecondLifeBot;
base.Name = "attachmentsuuid";
base.Description = bot.Localization.clResourceManager.getText("Commands.AttachmentsUUID.Description") + " " + bot.Localization.clResourceManager.getText("Commands.AttachmentsUUID.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
StringBuilder builder = new StringBuilder();
if (args.Length < 1)
{
return bot.Localization.clResourceManager.getText("Commands.AttachmentsUUID.Usage");
}
List<Avatar> avatars = Client.Network.Simulators[0].ObjectsAvatars.FindAll(
delegate(Avatar av)
{
return av.ID == (UUID)args[0];
}
);
List<Primitive> attachments = Client.Network.CurrentSim.ObjectsPrimitives.FindAll(
delegate(Primitive prim)
{
return prim.ParentID == avatars[0].LocalID;
}
);
for (int i = 0; i < attachments.Count; i++)
{
Primitive prim = attachments[i];
AttachmentPoint point = StateToAttachmentPoint(prim.PrimData.State);
// TODO: Fetch properties for the objects with missing property sets so we can show names
//Logger.Log(String.Format("[Attachment @ {0}] LocalID: {1} UUID: {2} Offset: {3}",
// point, prim.LocalID, prim.ID, prim.Position), Helpers.LogLevel.Info, Client);
builder.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Attachments.Attachment"),
point, prim.LocalID, prim.ID, prim.Position);
builder.AppendLine();
}
builder.AppendLine(String.Format(bot.Localization.clResourceManager.getText("Commands.Attachments.Found"), attachments.Count));
return builder.ToString();
}
public static AttachmentPoint StateToAttachmentPoint(uint state)
{
const uint ATTACHMENT_MASK = 0xF0;
uint fixedState = (((byte)state & ATTACHMENT_MASK) >> 4) | (((byte)state & ~ATTACHMENT_MASK) << 4);
return (AttachmentPoint)fixedState;
}
}
}

View File

@@ -0,0 +1,313 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AvatarInfoCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
public class AvatarInfoCommand : Command
{
ManualResetEvent WaitforAvatar = new ManualResetEvent(false);
Avatar.AvatarProperties foundAvProperties;
Avatar.Interests foundAvInterests;
List<AvatarGroup> foundAvGroups = new List<AvatarGroup>();
UUID foundAvUUID;
bool foundAvPropertiesCorrectlyGot = false;
bool foundAvInterestsCorrectlyGot = false;
bool foundAvGroupsCorrectlyGot = false;
bool moreThanOneAvFound = false;
public AvatarInfoCommand(SecondLifeBot SecondLifeBot)
{
Name = "avatarinfo";
Description = bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Description") + " " + bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Usage");
}
void Avatars_AvatarPropertiesReply(object sender, AvatarPropertiesReplyEventArgs e)
{
if (e.AvatarID == foundAvUUID)
{
foundAvPropertiesCorrectlyGot = true;
foundAvProperties = e.Properties;
}
else
{
foundAvPropertiesCorrectlyGot = false;
}
WaitforAvatar.Set();
return;
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
Client.Avatars.AvatarPropertiesReply += new EventHandler<AvatarPropertiesReplyEventArgs>(Avatars_AvatarPropertiesReply);
moreThanOneAvFound = false;
foundAvUUID = UUID.Zero;
Avatar foundAv = null;
foundAvProperties = new Avatar.AvatarProperties();
foundAvInterests = new Avatar.Interests();
foundAvGroups = new List<AvatarGroup>();
WaitforAvatar = new ManualResetEvent(false);
if (args.Length != 2)
return bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Usage");
string targetName = String.Format("{0} {1}", args[0], args[1]);
Client.FindOneAvatar(targetName, out foundAvUUID, out moreThanOneAvFound);
foundAv = Client.Network.CurrentSim.ObjectsAvatars.Find(
delegate(Avatar avatar)
{
return (avatar.Name == targetName);
}
);
if (foundAvUUID != UUID.Zero)
{
StringBuilder output = new StringBuilder();
if (moreThanOneAvFound)
{
output.AppendFormat("More than one avatar found with that search terms.");
output.AppendLine();
output.AppendFormat("{0} ({1})", targetName, foundAvUUID);
}
else
{
output.AppendFormat("{0} ({1})", targetName, foundAvUUID);
}
output.AppendLine();
Client.Avatars.RequestAvatarProperties(foundAvUUID);
if (!WaitforAvatar.WaitOne(10000, false))
{
Client.Avatars.AvatarPropertiesReply -= Avatars_AvatarPropertiesReply;
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.NotProfile"));
}
else
{
Client.Avatars.AvatarPropertiesReply -= Avatars_AvatarPropertiesReply;
if (foundAvPropertiesCorrectlyGot == true)
{
// CLAUNIA
// For some reason it is getting offline
/*
switch (foundAvProperties.Online)
{
case true:
output.AppendFormat("Avatar conectado");
output.AppendLine();
break;
case false:
output.AppendFormat("Avatar NO conectado");
output.AppendLine();
break;
}
*/
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.SecondLife"));
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Born"), foundAvProperties.BornOn);
output.AppendLine();
//output.AppendFormat(" Flags: {0}", foundAvProperties.Flags.ToString()); output.AppendLine();
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.SecondPhoto"), foundAvProperties.ProfileImage.ToString());
output.AppendLine();
output.Append(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Account"));
if (foundAvProperties.Identified)
output.Append(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Identified"));
if (foundAvProperties.MaturePublish)
output.Append(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Adult"));
if (foundAvProperties.Transacted)
output.Append(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Payment"));
if (foundAvProperties.AllowPublish)
output.Append(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Public"));
output.AppendLine(".");
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Partner"), foundAvProperties.Partner.ToString());
output.AppendLine();
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Charter"), foundAvProperties.CharterMember);
output.AppendLine();
WaitforAvatar.Reset();
Client.Avatars.AvatarGroupsReply += new EventHandler<AvatarGroupsReplyEventArgs>(Avatars_OnAvatarGroups);
Client.Avatars.RequestAvatarProperties(foundAvUUID);
if (!WaitforAvatar.WaitOne(2500, false))
{
Client.Avatars.AvatarGroupsReply -= Avatars_OnAvatarGroups;
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.NotGroups"));
}
else
{
Client.Avatars.AvatarGroupsReply -= Avatars_OnAvatarGroups;
if (foundAvGroupsCorrectlyGot)
{
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Groups"));
foreach (AvatarGroup avGroup in foundAvGroups)
{
output.AppendFormat(" {0} ({1})", avGroup.GroupName, avGroup.GroupID);
output.AppendLine();
}
}
}
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.About"));
output.AppendFormat(" {0}", foundAvProperties.AboutText);
output.AppendLine();
output.AppendLine();
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.WebProfile"), foundAvProperties.ProfileURL);
output.AppendLine();
output.AppendLine();
WaitforAvatar.Reset();
Client.Avatars.AvatarInterestsReply += new EventHandler<AvatarInterestsReplyEventArgs>(Avatars_OnAvatarInterests);
Client.Avatars.RequestAvatarProperties(foundAvUUID);
if (!WaitforAvatar.WaitOne(1000, false))
{
Client.Avatars.AvatarInterestsReply -= Avatars_OnAvatarInterests;
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.NotInterests"));
}
else
{
Client.Avatars.AvatarInterestsReply -= Avatars_OnAvatarInterests;
if (foundAvInterestsCorrectlyGot)
{
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Interests"));
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Wants"), foundAvInterests.WantToMask.ToString("X"), foundAvInterests.WantToText);
output.AppendLine();
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Skills"), foundAvInterests.SkillsMask.ToString("X"), foundAvInterests.SkillsText);
output.AppendLine();
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Languages"), foundAvInterests.LanguagesText);
output.AppendLine();
output.AppendLine();
}
}
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.FirstLife"));
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.FirstPhoto"), foundAvProperties.FirstLifeImage.ToString());
output.AppendLine();
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Information"), foundAvProperties.FirstLifeText);
output.AppendLine();
output.AppendLine();
}
else
{
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Error"));
}
}
// CLAUNIA
// There is no event nor method for requesting statistics.
/*
output.AppendLine("Estadísticas:");
output.AppendFormat(" Apariencia: {0} votos positivos, {1} votos negativos", foundAv.ProfileStatistics.AppearancePositive, foundAv.ProfileStatistics.AppearanceNegative); output.AppendLine();
output.AppendFormat(" Comportamiento: {0} votos positivos, {1} votos negativos", foundAv.ProfileStatistics.BehaviorPositive, foundAv.ProfileStatistics.BehaviorNegative); output.AppendLine();
output.AppendFormat(" Construcción: {0} votos positivos, {1} votos negativos", foundAv.ProfileStatistics.BuildingPositive, foundAv.ProfileStatistics.BuildingNegative); output.AppendLine();
output.AppendFormat(" Votos emitidos: {0} positivos, {1} negativos", foundAv.ProfileStatistics.GivenPositive, foundAv.ProfileStatistics.GivenNegative); output.AppendLine();
output.AppendLine();*/
if (foundAv != null)
{
if (foundAv.Textures != null)
{
output.AppendLine(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.Textures"));
for (int i = 0; i < foundAv.Textures.FaceTextures.Length; i++)
{
if (foundAv.Textures.FaceTextures[i] != null)
{
Primitive.TextureEntryFace face = foundAv.Textures.FaceTextures[i];
AvatarTextureIndex type = (AvatarTextureIndex)i;
output.AppendFormat(" {0}: {1}", type, face.TextureID);
output.AppendLine();
}
}
}
}
return output.ToString();
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.AvatarInfo.NotFound"), targetName);
}
}
void Avatars_OnAvatarGroups(object sender, AvatarGroupsReplyEventArgs e)
{
if (e.AvatarID == foundAvUUID)
{
foundAvGroupsCorrectlyGot = true;
foundAvGroups = e.Groups;
}
else
{
foundAvGroupsCorrectlyGot = false;
}
WaitforAvatar.Set();
return;
}
void Avatars_OnAvatarInterests(object sender, AvatarInterestsReplyEventArgs e)
{
if (e.AvatarID == foundAvUUID)
{
foundAvInterestsCorrectlyGot = true;
foundAvInterests = e.Interests;
}
else
{
foundAvInterestsCorrectlyGot = false;
}
WaitforAvatar.Set();
return;
}
}
}

View File

@@ -0,0 +1,115 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : CloneCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System;
using System.Collections.Generic;
using System.Threading;
public class CloneCommand : Command
{
uint SerialNum = 2;
public CloneCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "clone";
base.Description = bot.Localization.clResourceManager.getText("Commands.Clone.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Clone.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
string targetName = String.Empty;
List<DirectoryManager.AgentSearchData> matches;
for (int ct = 0; ct < args.Length; ct++)
targetName = targetName + args[ct] + " ";
targetName = targetName.TrimEnd();
if (targetName.Length == 0)
return bot.Localization.clResourceManager.getText("Commands.Clone.Usage");
if (Client.Directory.PeopleSearch(DirectoryManager.DirFindFlags.People, targetName, 0, 1000 * 10,
out matches) && matches.Count > 0)
{
UUID target = matches[0].AgentID;
targetName += String.Format(" ({0})", target);
if (Client.Appearances.ContainsKey(target))
{
#region AvatarAppearance to AgentSetAppearance
AvatarAppearancePacket appearance = Client.Appearances[target];
AgentSetAppearancePacket set = new AgentSetAppearancePacket();
set.AgentData.AgentID = Client.Self.AgentID;
set.AgentData.SessionID = Client.Self.SessionID;
set.AgentData.SerialNum = SerialNum++;
set.AgentData.Size = new Vector3(2f, 2f, 2f); // HACK
set.WearableData = new AgentSetAppearancePacket.WearableDataBlock[0];
set.VisualParam = new AgentSetAppearancePacket.VisualParamBlock[appearance.VisualParam.Length];
for (int i = 0; i < appearance.VisualParam.Length; i++)
{
set.VisualParam[i] = new AgentSetAppearancePacket.VisualParamBlock();
set.VisualParam[i].ParamValue = appearance.VisualParam[i].ParamValue;
}
set.ObjectData.TextureEntry = appearance.ObjectData.TextureEntry;
#endregion AvatarAppearance to AgentSetAppearance
// Detach everything we are currently wearing
Client.Appearance.AddAttachments(new List<InventoryItem>(), true);
// Send the new appearance packet
Client.Network.SendPacket(set);
return String.Format(bot.Localization.clResourceManager.getText("Commands.Clone.Done"), targetName);
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.Clone.Unknown"), targetName);
}
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.Clone.NotFound"), targetName);
}
}
}
}

View File

@@ -0,0 +1,186 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : CloneProfileCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System;
using System.Collections.Generic;
using System.Threading;
public class CloneProfileCommand : Command
{
Avatar.AvatarProperties Properties;
Avatar.Interests Interests;
List<UUID> Groups = new List<UUID>();
bool ReceivedProperties = false;
bool ReceivedInterests = false;
bool ReceivedGroups = false;
ManualResetEvent ReceivedProfileEvent = new ManualResetEvent(false);
public CloneProfileCommand(SecondLifeBot SecondLifeBot)
{
SecondLifeBot.Avatars.AvatarInterestsReply += new EventHandler<AvatarInterestsReplyEventArgs>(Avatars_AvatarInterestsReply);
SecondLifeBot.Avatars.AvatarPropertiesReply += new EventHandler<AvatarPropertiesReplyEventArgs>(Avatars_AvatarPropertiesReply);
SecondLifeBot.Avatars.AvatarGroupsReply += new EventHandler<AvatarGroupsReplyEventArgs>(Avatars_AvatarGroupsReply);
SecondLifeBot.Groups.GroupJoinedReply += new EventHandler<GroupOperationEventArgs>(Groups_OnGroupJoined);
SecondLifeBot.Avatars.AvatarPicksReply += new EventHandler<AvatarPicksReplyEventArgs>(Avatars_AvatarPicksReply);
base.Name = "cloneprofile";
base.Description = bot.Localization.clResourceManager.getText("Commands.CloneProfile.Description") + " " + bot.Localization.clResourceManager.getText("Commands.CloneProfile.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.CloneProfile.Usage");
UUID targetID;
ReceivedProperties = false;
ReceivedInterests = false;
ReceivedGroups = false;
try
{
targetID = new UUID(args[0]);
}
catch (Exception)
{
return bot.Localization.clResourceManager.getText("Commands.CloneProfile.Usage");
}
// Request all of the packets that make up an avatar profile
Client.Avatars.RequestAvatarProperties(targetID);
// Wait for all the packets to arrive
ReceivedProfileEvent.Reset();
ReceivedProfileEvent.WaitOne(5000, false);
// Check if everything showed up
if (!ReceivedInterests || !ReceivedProperties || !ReceivedGroups)
return bot.Localization.clResourceManager.getText("Commands.CloneProfile.Fail");
// Synchronize our profile
Client.Self.UpdateInterests(Interests);
Client.Self.UpdateProfile(Properties);
// TODO: Leave all the groups we're currently a member of? This could
// break TestClient connectivity that might be relying on group authentication
// Attempt to join all the groups
foreach (UUID groupID in Groups)
{
Client.Groups.RequestJoinGroup(groupID);
}
return String.Format(bot.Localization.clResourceManager.getText("Commands.CloneProfile.Done"), targetID.ToString());
}
void Avatars_AvatarPropertiesReply(object sender, AvatarPropertiesReplyEventArgs e)
{
lock (ReceivedProfileEvent)
{
Properties = e.Properties;
ReceivedProperties = true;
if (ReceivedInterests && ReceivedProperties && ReceivedGroups)
ReceivedProfileEvent.Set();
}
}
void Avatars_AvatarInterestsReply(object sender, AvatarInterestsReplyEventArgs e)
{
lock (ReceivedProfileEvent)
{
Interests = e.Interests;
ReceivedInterests = true;
if (ReceivedInterests && ReceivedProperties && ReceivedGroups)
ReceivedProfileEvent.Set();
}
}
void Avatars_AvatarGroupsReply(object sender, AvatarGroupsReplyEventArgs e)
{
lock (ReceivedProfileEvent)
{
foreach (AvatarGroup group in e.Groups)
{
Groups.Add(group.GroupID);
}
ReceivedGroups = true;
if (ReceivedInterests && ReceivedProperties && ReceivedGroups)
ReceivedProfileEvent.Set();
}
}
void Groups_OnGroupJoined(object sender, GroupOperationEventArgs e)
{
if (e.Success)
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.CloneProfile.Joined"), e.GroupID.ToString());
else
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.CloneProfile.FailJoin"), e.GroupID.ToString());
if (e.Success)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.CloneProfile.Active"), Client.ToString(),
e.GroupID.ToString());
Client.Groups.ActivateGroup(e.GroupID);
}
}
void Avatars_PickInfoReply(object sender, PickInfoReplyEventArgs e)
{
Client.Self.PickInfoUpdate(e.PickID, e.Pick.TopPick, e.Pick.ParcelID, e.Pick.Name, e.Pick.PosGlobal, e.Pick.SnapshotID, e.Pick.Desc);
}
void Avatars_AvatarPicksReply(object sender, AvatarPicksReplyEventArgs e)
{
foreach (KeyValuePair<UUID, string> kvp in e.Picks)
{
if (e.AvatarID == Client.Self.AgentID)
{
Client.Self.PickDelete(kvp.Key);
}
else
{
Client.Avatars.RequestPickInfo(e.AvatarID, kvp.Key);
}
}
}
}
}

View File

@@ -0,0 +1,117 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : DetectBotCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System;
using System.Collections.Generic;
using System.Text;
public class DetectBotCommand : Command
{
private Dictionary<UUID, bool> m_AgentList = new Dictionary<UUID, bool>();
public DetectBotCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "detectbots";
base.Description = bot.Localization.clResourceManager.getText("Commands.DetectBot.Description");
SecondLifeBot.Avatars.ViewerEffect += new EventHandler<ViewerEffectEventArgs>(Avatars_ViewerEffect);
SecondLifeBot.Avatars.ViewerEffectLookAt += new EventHandler<ViewerEffectLookAtEventArgs>(Avatars_ViewerEffectLookAt);
SecondLifeBot.Avatars.ViewerEffectPointAt += new EventHandler<ViewerEffectPointAtEventArgs>(Avatars_ViewerEffectPointAt);
}
private void Avatars_ViewerEffectPointAt(object sender, ViewerEffectPointAtEventArgs e)
{
lock (m_AgentList)
{
if (m_AgentList.ContainsKey(e.SourceID))
m_AgentList[e.SourceID] = true;
else
m_AgentList.Add(e.SourceID, true);
}
}
private void Avatars_ViewerEffectLookAt(object sender, ViewerEffectLookAtEventArgs e)
{
lock (m_AgentList)
{
if (m_AgentList.ContainsKey(e.SourceID))
m_AgentList[e.SourceID] = true;
else
m_AgentList.Add(e.SourceID, true);
}
}
private void Avatars_ViewerEffect(object sender, ViewerEffectEventArgs e)
{
lock (m_AgentList)
{
if (m_AgentList.ContainsKey(e.SourceID))
m_AgentList[e.SourceID] = true;
else
m_AgentList.Add(e.SourceID, true);
}
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
StringBuilder result = new StringBuilder();
lock (Client.Network.Simulators)
{
for (int i = 0; i < Client.Network.Simulators.Count; i++)
{
Client.Network.Simulators[i].ObjectsAvatars.ForEach(
delegate(Avatar av)
{
lock (m_AgentList)
{
if (!m_AgentList.ContainsKey(av.ID))
{
result.AppendLine();
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.DetectBot.Bot"),
av.Name, av.GroupName, av.Position, av.ID, av.LocalID);
}
}
}
);
}
}
return result.ToString();
}
}
}

View File

@@ -0,0 +1,71 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : DetectLindensCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
/*namespace bot.Commands
{
using bot;
using libsecondlife;
using libsecondlife.Packets;
using System;
public class DetectBotCommand : Command
{
public DetectBotCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "detectlindens";
base.Description = "Runs in the background, reporting any potential bots";
SecondLifeBot.Network.RegisterCallback(PacketType.AgentUpdate, new NetworkManager.PacketCallback(this.AgentUpdatePacketHandler));
}
private void AvatarAppearanceHandler(Packet packet, Simulator simulator)
{
AvatarAppearancePacket packet2 = (AvatarAppearancePacket)packet;
packet2.ObjectData[
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
return "This command is always running";
}
private bool IsNullOrZero(LLObject.TextureEntryFace face)
{
if (face != null)
{
return (face.TextureID == UUID.Zero);
}
return true;
}
}
}
*/

View File

@@ -0,0 +1,95 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : EndFriendshipCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
public class EndFriendshipCommand : Command
{
public EndFriendshipCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "endfriendship";
base.Description = bot.Localization.clResourceManager.getText("Commands.EndFriendship.Description") + " " + bot.Localization.clResourceManager.getText("Commands.EndFriendship.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
UUID avatarID = UUID.Zero;
string avatarName = "";
bool isGroupKey = false;
if (args.Length == 1)
{
if (!UUID.TryParse(args[0], out avatarID))
return bot.Localization.clResourceManager.getText("Commands.EndFriendship.Usage");
if (!Client.key2Name(avatarID, out avatarName, out isGroupKey))
return bot.Localization.clResourceManager.getText("Commands.OfferFriendship.AvNotFound");
if (isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.EndFriendship.CannotGroup");
}
else if (args.Length == 2)
{
avatarName = args[0] + " " + args[1];
if (!Client.FindOneAvatar(avatarName, out avatarID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.OfferFriendship.NameNotFound"), avatarName);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.EndFriendship.Usage");
}
if (avatarID != UUID.Zero)
{
if (!Client.Friends.FriendList.ContainsKey(avatarID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.EndFriendship.NotFriend"), avatarName);
Client.Friends.TerminateFriendship(avatarID);
return String.Format(bot.Localization.clResourceManager.getText("Commands.EndFriendship.Terminated"), avatarName);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.OfferFriendship.Error");
}
}
}
}

View File

@@ -0,0 +1,94 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ExportOutfitCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using OpenMetaverse.Packets;
using OpenMetaverse.StructuredData;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
public class ExportOutfitCommand : Command
{
public ExportOutfitCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "exportoutfit";
base.Description = bot.Localization.clResourceManager.getText("Commands.ExportOutfit.Description") + " " + bot.Localization.clResourceManager.getText("Commands.ExportOutfit.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
UUID id;
string path;
if (args.Length == 1)
{
id = Client.Self.AgentID;
path = args[0];
}
else if (args.Length == 2)
{
if (!UUID.TryParse(args[0], out id))
return bot.Localization.clResourceManager.getText("Commands.ExportOutfit.Usage");
path = args[1];
}
else
return bot.Localization.clResourceManager.getText("Commands.ExportOutfit.Usage");
lock (Client.Appearances)
{
if (Client.Appearances.ContainsKey(id))
{
try
{
File.WriteAllText(path, Packet.ToXmlString(Client.Appearances[id]));
}
catch (Exception e)
{
return e.ToString();
}
return String.Format(bot.Localization.clResourceManager.getText("Commands.ExportOutfit.Exported"), id.ToString(), args[1]);
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.ExportOutfit.NotFound"), id.ToString());
}
}
}
}
}

View File

@@ -0,0 +1,85 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : FriendsCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
public class FriendsCommand : Command
{
public FriendsCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "friends";
base.Description = bot.Localization.clResourceManager.getText("Commands.Friends.Description");
}
/// <summary>
/// Get a list of current friends
/// </summary>
/// <param name="args">optional testClient command arguments</param>
/// <param name="fromAgentID">The <seealso cref="OpenMetaverse.UUID"/>
/// of the agent making the request</param>
/// <returns></returns>
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
// initialize a StringBuilder object used to return the results
StringBuilder sb = new StringBuilder();
// Only iterate the Friends dictionary if we actually have friends!
if (Client.Friends.FriendList.Count > 0)
{
// iterate over the InternalDictionary using a delegate to populate
// our StringBuilder output string
Client.Friends.FriendList.ForEach(delegate(FriendInfo friend)
{
// append the name of the friend to our output
sb.AppendLine(friend.Name + "(UUID: " + friend.UUID.ToString() + ")");
});
}
else
{
// we have no friends :(
sb.AppendLine(bot.Localization.clResourceManager.getText("Commands.Friends.NoFriends"));
}
// return the result
return sb.ToString();
}
}
}

View File

@@ -0,0 +1,130 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ImportOutfitCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
/*namespace bot.Commands
{
using bot;
using OpenMetaverse;
using OpenMetaverse.Packets;
using OpenMetaverse.StructuredData;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
public class ImportOutfitCommand : Command
{
private Vector3 currentPosition;
private Primitive currentPrim;
private List<uint> linkQueue;
private AutoResetEvent primDone = new AutoResetEvent(false);
private List<Primitive> primsCreated;
private uint rootLocalID;
private ImporterState state = ImporterState.Idle;
private uint SerialNum = 2;
private enum ImporterState
{
RezzingParent,
RezzingChildren,
Linking,
Idle
}
private class Linkset
{
public List<Primitive> Children;
public Primitive RootPrim;
public Linkset()
{
this.Children = new List<Primitive>();
this.RootPrim = new Primitive();
}
public Linkset(Primitive rootPrim)
{
this.Children = new List<Primitive>();
this.RootPrim = rootPrim;
}
}
public ImportOutfitCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "importoutfit";
base.Description = bot.Localization.clResourceManager.getText("Commands.ImportOutfit.Description") + " " + bot.Localization.clResourceManager.getText("Commands.ImportOutfit.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
/* if (args.Length != 1)
{
return "Uso: importoutfit apariencia.xml";
}
string path = args[0];
string str2;
try
{
str2 = File.ReadAllText(path);
}
catch (Exception exception)
{
return exception.Message;
}
if (str2.Length == 0)
return "El archivo exportado está dañado.";
AvatarAppearancePacket packet= (AvatarAppearancePacket)AvatarAppearancePacket.FromLLSD(LLSDParser.DeserializeXml(str2));
AgentSetAppearancePacket packet2 = new AgentSetAppearancePacket();
packet2.AgentData.AgentID = base.Client.Self.AgentID;
packet2.AgentData.SessionID = base.Client.Self.SessionID;
packet2.AgentData.SerialNum = this.SerialNum++;
packet2.AgentData.Size = new Vector3(2f, 2f, 2f);
packet2.WearableData = new AgentSetAppearancePacket.WearableDataBlock[0];
packet2.VisualParam = new AgentSetAppearancePacket.VisualParamBlock[packet.VisualParam.Length];
for (int j = 0; j < packet.VisualParam.Length; j++)
{
packet2.VisualParam[j] = new AgentSetAppearancePacket.VisualParamBlock();
packet2.VisualParam[j].ParamValue = packet.VisualParam[j].ParamValue;
}
packet2.ObjectData.TextureEntry = packet.ObjectData.TextureEntry;
base.Client.Appearance.AddAttachments(new List<InventoryBase>(), true);
base.Client.Network.SendPacket(packet2);
return ("Importado" + args[0]);*/
/* return bot.Localization.clResourceManager.getText("Exception");
}
}
}
*/

View File

@@ -0,0 +1,76 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : InformFriendCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using OpenMetaverse;
public class InformFriendCommand : Command
{
public InformFriendCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "informfriend";
base.Description = bot.Localization.clResourceManager.getText("Commands.InformFriend.Description") + " " + bot.Localization.clResourceManager.getText("Commands.InformFriend.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length == 0)
{
if (Client.InformFriends)
return bot.Localization.clResourceManager.getText("Commands.InformFriend.Inform");
else
return bot.Localization.clResourceManager.getText("Commands.InformFriend.NotInform");
}
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.InformFriend.Usage");
if (args[0].ToLower() == "on")
{
Client.InformFriends = true;
return bot.Localization.clResourceManager.getText("Commands.InformFriend.WillInform");
}
else if (args[0].ToLower() == "off")
{
Client.InformFriends = false;
return bot.Localization.clResourceManager.getText("Commands.InformFriend.WontInform");
}
else
{
return bot.Localization.clResourceManager.getText("Commands.InformFriend.Usage");
}
}
}
}

View File

@@ -0,0 +1,85 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : MapFriendCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Text;
using System.Threading;
public class MapFriendCommand : Command
{
ManualResetEvent WaitforFriend = new ManualResetEvent(false);
public MapFriendCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "mapfriend";
base.Description = bot.Localization.clResourceManager.getText("Commands.MapFriend.Description") + " " + bot.Localization.clResourceManager.getText("Commands.MapFriend.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.MapFriend.Usage");
UUID targetID;
if (!UUID.TryParse(args[0], out targetID))
return bot.Localization.clResourceManager.getText("Commands.MapFriend.Usage");
StringBuilder sb = new StringBuilder();
EventHandler<FriendFoundReplyEventArgs> del = delegate(object sender, FriendFoundReplyEventArgs e)
{
if (!e.RegionHandle.Equals(0))
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.MapFriend.Found"), e.AgentID, e.RegionHandle, e.Location.X, e.Location.Y);
else
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.MapFriend.Offline"), e.AgentID);
WaitforFriend.Set();
};
Client.Friends.FriendFoundReply += del;
WaitforFriend.Reset();
Client.Friends.MapFriend(targetID);
if (!WaitforFriend.WaitOne(10000, false))
{
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.MapFriend.TimeOut"), targetID);
}
Client.Friends.FriendFoundReply -= del;
return sb.ToString();
}
}
}

View File

@@ -0,0 +1,95 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : OfferFriendshipCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
public class OfferFriendshipCommand : Command
{
public OfferFriendshipCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "offerfriendship";
base.Description = bot.Localization.clResourceManager.getText("Commands.OfferFriendship.Description") + " " + bot.Localization.clResourceManager.getText("Commands.OfferFriendship.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
UUID avatarID = UUID.Zero;
string avatarName = "";
bool isGroupKey = false;
if (args.Length == 1)
{
if (!UUID.TryParse(args[0], out avatarID))
return bot.Localization.clResourceManager.getText("Commands.OfferFriendship.Usage");
if (!Client.key2Name(avatarID, out avatarName, out isGroupKey))
return bot.Localization.clResourceManager.getText("Commands.OfferFriendship.AvNotFound");
if (isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.OfferFriendship.CannotGroup");
}
else if (args.Length == 2)
{
avatarName = args[0] + " " + args[1];
if (!Client.FindOneAvatar(avatarName, out avatarID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.OfferFriendship.NameNotFound"), avatarName);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.OfferFriendship.Usage");
}
if (avatarID != UUID.Zero)
{
if (Client.Friends.FriendList.ContainsKey(avatarID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.OfferFriendship.AlreadyFriend"), avatarName);
Client.Friends.OfferFriendship(avatarID, bot.Localization.clResourceManager.getText("Commands.OfferFriendship.Message"));
return String.Format(bot.Localization.clResourceManager.getText("Commands.OfferFriendship.Offered"), avatarName);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.OfferFriendship.Error");
}
}
}
}

View File

@@ -0,0 +1,111 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : WhoCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Text;
using System.Collections.Generic;
public class WhoCommand : Command
{
public WhoCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "who";
base.Description = bot.Localization.clResourceManager.getText("Commands.Who.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
StringBuilder result = new StringBuilder();
Dictionary<UUID, string> ClientNames = ClientTags.ToDictionary();
lock (Client.Network.Simulators)
{
for (int i = 0; i < Client.Network.Simulators.Count; i++)
{
Client.Network.Simulators[i].ObjectsAvatars.ForEach(
delegate(Avatar av)
{
Vector3 RealPosition;
if (av.ParentID != 0)
{
Primitive SitPrim;
SitPrim = Client.Network.CurrentSim.ObjectsPrimitives.Find(
delegate(Primitive prim)
{
return prim.LocalID == av.ParentID;
}
);
if (SitPrim == null)
RealPosition = new Vector3(0, 0, 0);
else
RealPosition = SitPrim.Position;
}
else
{
RealPosition = av.Position;
}
string ViewerName;
if (av.Textures == null)
ViewerName = bot.Localization.clResourceManager.getText("Viewer.Unknown");
else
{
if (av.Textures.FaceTextures[(int)AvatarTextureIndex.HeadBodypaint] != null)
{
if (!ClientNames.TryGetValue(av.Textures.FaceTextures[(int)AvatarTextureIndex.HeadBodypaint].TextureID, out ViewerName))
ViewerName = bot.Localization.clResourceManager.getText("Viewer.Unidentified");
}
else
ViewerName = bot.Localization.clResourceManager.getText("Viewer.Unknown");
}
result.AppendLine();
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Who.Info"),
av.Name, ViewerName, av.GroupName, RealPosition, av.ID.ToString());
}
);
}
}
return result.ToString();
}
}
}

View File

@@ -0,0 +1,60 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : Command.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
Copyright (C) 2007-2009 openmetaverse.org
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public abstract class Command
{
public bool Active;
public SecondLifeBot Client;
public string Description;
public string Name;
protected Command()
{
}
public abstract string Execute(string[] args, UUID fromAgentID, bool fromSL);
public virtual void Think()
{
}
}
}

View File

@@ -0,0 +1,70 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : EchoMasterCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class EchoMasterCommand : Command
{
public EchoMasterCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "echoMaster";
base.Description = bot.Localization.clResourceManager.getText("Commands.EchoMaster.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (!Active)
{
Active = true;
Client.Self.ChatFromSimulator += Self_ChatFromSimulator;
return bot.Localization.clResourceManager.getText("Commands.EchoMaster.On");
}
else
{
Active = false;
Client.Self.ChatFromSimulator -= Self_ChatFromSimulator;
return bot.Localization.clResourceManager.getText("Commands.EchoMaster.Off");
}
}
void Self_ChatFromSimulator(object sender, ChatEventArgs e)
{
if (e.Message.Length > 0 && (Client.MasterKey == e.SourceID || (Client.MasterName == e.FromName /*&& !Client.AllowObjectMaster*/)))
Client.Self.Chat(e.Message, 0, ChatType.Normal);
}
}
}

View File

@@ -0,0 +1,121 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ImCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Threading;
public class ImCommand : Command
{
string ToAvatarName = String.Empty;
ManualResetEvent NameSearchEvent = new ManualResetEvent(false);
Dictionary<string, UUID> Name2Key = new Dictionary<string, UUID>();
public ImCommand(SecondLifeBot SecondLifeBot)
{
SecondLifeBot.Avatars.AvatarPickerReply += Avatars_AvatarPickerReply;
base.Name = "im";
base.Description = bot.Localization.clResourceManager.getText("Commands.IM.Description") + " " + bot.Localization.clResourceManager.getText("Commands.IM.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 3)
return bot.Localization.clResourceManager.getText("Commands.IM.Usage");
ToAvatarName = args[0] + " " + args[1];
// Build the message
string message = String.Empty;
for (int ct = 2; ct < args.Length; ct++)
message += args[ct] + " ";
message = message.TrimEnd();
if (message.Length > 1023)
message = message.Remove(1023);
if (!Name2Key.ContainsKey(ToAvatarName.ToLower()))
{
// Send the Query
Client.Avatars.RequestAvatarNameSearch(ToAvatarName, UUID.Random());
NameSearchEvent.WaitOne(6000, false);
}
if (Name2Key.ContainsKey(ToAvatarName.ToLower()))
{
UUID id = Name2Key[ToAvatarName.ToLower()];
Client.Self.InstantMessage(id, message);
bot.Chat.structInstantMessage sim;
InstantMessage im = new InstantMessage();
im.Message = message;
im.FromAgentID = id;
im.FromAgentName = ToAvatarName;
im.Dialog = InstantMessageDialog.MessageFromAgent;
sim.client = this.Client;
sim.isReceived = false;
sim.message = im;
sim.simulator = this.Client.Network.CurrentSim;
sim.timestamp = DateTime.Now;
bot.Chat.receivedIM(sim);
return String.Format(bot.Localization.clResourceManager.getText("Commands.IM.Success"), id.ToString(), message);
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.IM.LookupFail"), ToAvatarName);
}
}
void Avatars_AvatarPickerReply(object sender, AvatarPickerReplyEventArgs e)
{
foreach (KeyValuePair<UUID, string> kvp in e.Avatars)
{
if (kvp.Value.ToLower() == ToAvatarName.ToLower())
{
Name2Key[ToAvatarName.ToLower()] = kvp.Key;
NameSearchEvent.Set();
return;
}
}
}
}
}

View File

@@ -0,0 +1,78 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : SayCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Text;
public class SayCommand : Command
{
public SayCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "say";
base.Description = bot.Localization.clResourceManager.getText("Commands.Say.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Say.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
int channel = 0;
int startIndex = 0;
if (args.Length < 1)
{
return bot.Localization.clResourceManager.getText("Commands.Say.Usage");
}
else if (args.Length > 1)
{
if (Int32.TryParse(args[0], out channel))
startIndex = 1;
}
StringBuilder message = new StringBuilder();
for (int i = startIndex; i < args.Length; i++)
{
message.Append(args[i]);
if (i != args.Length - 1)
message.Append(" ");
}
Client.Self.Chat(message.ToString(), channel, ChatType.Normal);
return String.Format(bot.Localization.clResourceManager.getText("Commands.Say.Said"), message.ToString());
}
}
}

View File

@@ -0,0 +1,80 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ShoutCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class ShoutCommand : Command
{
public ShoutCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "shout";
base.Description = bot.Localization.clResourceManager.getText("Commands.Shout.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Shout.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
int channel = 0;
int startIndex = 0;
string message = String.Empty;
if (args.Length < 1)
{
return bot.Localization.clResourceManager.getText("Commands.Shout.Usage");
}
else if (args.Length > 1)
{
try
{
channel = Convert.ToInt32(args[0]);
startIndex = 1;
}
catch (FormatException)
{
channel = 0;
}
}
for (int i = startIndex; i < args.Length; i++)
{
message += args[i] + " ";
}
Client.Self.Chat(message, channel, ChatType.Shout);
return String.Format(bot.Localization.clResourceManager.getText("Commands.Shout.Shouted"), message);
}
}
}

View File

@@ -0,0 +1,80 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : WhisperCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class WhisperCommand : Command
{
public WhisperCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "whisper";
base.Description = bot.Localization.clResourceManager.getText("Commands.Whisper.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Whisper.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
int channel = 0;
int startIndex = 0;
string message = String.Empty;
if (args.Length < 1)
{
return bot.Localization.clResourceManager.getText("Commands.Whisper.Usage");
}
else if (args.Length > 1)
{
try
{
channel = Convert.ToInt32(args[0]);
startIndex = 1;
}
catch (FormatException)
{
channel = 0;
}
}
for (int i = startIndex; i < args.Length; i++)
{
message += args[i] + " ";
}
Client.Self.Chat(message, channel, ChatType.Whisper);
return String.Format(bot.Localization.clResourceManager.getText("Commands.Whisper.Whispered"), message);
}
}
}

View File

@@ -0,0 +1,108 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AnimationsCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.IO;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
using System.Collections.Generic;
public class AnimationsCommand : Command
{
Dictionary<UUID, UUID> alreadyRequested = new Dictionary<UUID, UUID>();
bool enabled = false;
public AnimationsCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "animations";
base.Description = bot.Localization.clResourceManager.getText("Commands.Animations.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Animations.Usage");
enabled = SecondLifeBot.Account.LoginDetails.BotConfig.GetSounds;
SecondLifeBot.Avatars.AvatarAnimation += new EventHandler<AvatarAnimationEventArgs>(Avatars_AvatarAnimation);
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.Animations.Usage");
if (args[0].ToLower() == "on")
{
enabled = true;
return bot.Localization.clResourceManager.getText("Commands.Animations.Enabled");
}
else if (args[0].ToLower() == "off")
{
enabled = false;
return bot.Localization.clResourceManager.getText("Commands.Animations.Disabled");
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Animations.Usage");
}
}
void Avatars_AvatarAnimation(object sender, AvatarAnimationEventArgs e)
{
Dictionary<UUID, string> BuiltInAnimations = Animations.ToDictionary();
if (enabled && base.Client.Account.LoginDetails.BotConfig.GetSounds)
{
foreach (Animation an in e.Animations)
{
if (!BuiltInAnimations.ContainsKey(an.AnimationID))
if (!System.IO.File.Exists("./animations/" + an.AnimationID.ToString() + ".animatn"))
base.Client.Assets.RequestAsset(an.AnimationID, AssetType.Animation, true, Assets_OnAnimationReceived);
}
}
}
public void Assets_OnAnimationReceived(AssetDownload transfer, Asset asset)
{
if (transfer.Success)
{
if (!System.IO.Directory.Exists("./animations"))
System.IO.Directory.CreateDirectory("./animations");
System.IO.File.WriteAllBytes("./animations/" + asset.AssetID.ToString() + ".animatn", asset.AssetData);
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.Downloaded"), asset.AssetID.ToString(), asset.AssetData.Length);
}
else
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.Failed"), transfer.AssetID, transfer.Status);
}
}
}
}

View File

@@ -0,0 +1,99 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : DownloadAnimationCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System;
using System.Collections.Generic;
using System.Threading;
using System.IO;
using OpenMetaverse.Assets;
public class DownloadAnimationCommand : Command
{
string downloadResult;
System.Threading.AutoResetEvent waitEvent = new System.Threading.AutoResetEvent(false);
public DownloadAnimationCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "downloadanimation";
base.Description = bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.Description") + " " + bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
UUID AnimationUUID;
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.Usage");
if (!UUID.TryParse(args[0], out AnimationUUID))
{
return bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.InvalidUUID");
}
Program.NBStats.AddStatData(String.Format("{0}: {1} downloading animation {2}.", DateTime.Now.ToString(), Client, args[0]));
base.Client.Assets.RequestAsset(AnimationUUID, AssetType.Animation, true, Assets_OnAnimationReceived);
if (!waitEvent.WaitOne(10000, false))
{
return bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.Timeout");
}
else
{
return downloadResult;
}
}
public void Assets_OnAnimationReceived(AssetDownload transfer, Asset asset)
{
if (transfer.Success)
{
if (!System.IO.Directory.Exists("./animations"))
System.IO.Directory.CreateDirectory("./animations");
System.IO.File.WriteAllBytes("./animations/" + asset.AssetID.ToString() + ".animatn", asset.AssetData);
downloadResult = String.Format(bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.Downloaded"), asset.AssetID.ToString(), asset.AssetData.Length);
}
else
{
downloadResult = String.Format(bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.Failed"), transfer.AssetID, transfer.Status);
}
waitEvent.Set();
}
}
}

View File

@@ -0,0 +1,100 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : DownloadSoundCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.IO;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
public class DownloadSoundCommand : Command
{
AutoResetEvent DownloadHandle = new AutoResetEvent(false);
string resultState;
public DownloadSoundCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "downloadsound";
base.Description = bot.Localization.clResourceManager.getText("Commands.DownloadSound.Description") + " " + bot.Localization.clResourceManager.getText("Commands.DownloadSound.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
UUID SoundID;
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.DownloadSound.Usage");
DownloadHandle.Reset();
if (UUID.TryParse(args[0], out SoundID))
{
Program.NBStats.AddStatData(String.Format("{0}: {1} downloading sound {2}.", DateTime.Now.ToString(), Client, args[0]));
base.Client.Assets.RequestAsset(SoundID, AssetType.Sound, true, Assets_OnSoundReceived);
if (DownloadHandle.WaitOne(120 * 1000, false))
{
return resultState;
}
else
{
return bot.Localization.clResourceManager.getText("Commands.DownloadSound.Timeout");
}
}
else
{
return bot.Localization.clResourceManager.getText("Commands.DownloadAnimation.InvalidUUID");
}
}
public void Assets_OnSoundReceived(AssetDownload transfer, Asset asset)
{
if (transfer.Success)
{
if (!System.IO.Directory.Exists("./sounds"))
System.IO.Directory.CreateDirectory("./sounds");
System.IO.File.WriteAllBytes("./sounds/" + asset.AssetID.ToString() + ".ogg", asset.AssetData);
resultState = String.Format(bot.Localization.clResourceManager.getText("Commands.Sounds.Downloaded"), asset.AssetID.ToString(), asset.AssetData.Length);
}
else
{
resultState = String.Format(bot.Localization.clResourceManager.getText("Commands.Sounds.Failed"), transfer.AssetID, transfer.Status);
}
DownloadHandle.Set();
}
}
}

View File

@@ -0,0 +1,151 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : DownloadTextureCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.IO;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
public class DownloadTextureCommand : Command
{
UUID TextureID;
AutoResetEvent DownloadHandle = new AutoResetEvent(false);
TextureRequestState resultState;
AssetTexture Asset;
public DownloadTextureCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "downloadtexture";
base.Description = bot.Localization.clResourceManager.getText("Commands.DownloadTexture.Description") + " " + bot.Localization.clResourceManager.getText("Commands.DownloadTexture.Usage");
//SecondLifeBot.Assets.OnImageReceiveProgress += new AssetManager.ImageReceiveProgressCallback(Assets_OnImageReceiveProgress);
//SecondLifeBot.Assets.OnImageReceived += new AssetManager.ImageReceivedCallback(Assets_OnImageReceived);
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.DownloadTexture.Usage");
if (args.Length != 1 && args.Length != 2)
return bot.Localization.clResourceManager.getText("Commands.DownloadTexture.UsageLong");
TextureID = UUID.Zero;
DownloadHandle.Reset();
Asset = null;
if (UUID.TryParse(args[0], out TextureID))
{
int discardLevel = 0;
if (args.Length > 1)
{
if (!Int32.TryParse(args[1], out discardLevel))
return bot.Localization.clResourceManager.getText("Commands.DownloadTexture.UsageLong");
}
Program.NBStats.AddStatData(String.Format("{0}: {1} downloading texture {2}.", DateTime.Now.ToString(), Client, args[0]));
Client.Assets.RequestImage(TextureID, ImageType.Normal, Assets_OnImageReceived);
if (DownloadHandle.WaitOne(120 * 1000, false))
{
if (resultState == TextureRequestState.Finished)
{
if (Asset != null && Asset.Decode())
{
if (!Directory.Exists("textures/"))
Directory.CreateDirectory("textures/");
try
{
File.WriteAllBytes("textures/" + Asset.AssetID + ".jp2", Asset.AssetData);
}
catch (Exception ex)
{
bot.Console.WriteLine(ex.Message, Helpers.LogLevel.Error, Client, ex);
}
try
{
File.WriteAllBytes("textures/" + Asset.AssetID + ".tga", Asset.Image.ExportTGA());
}
catch (Exception ex)
{
bot.Console.WriteLine(ex.Message, Helpers.LogLevel.Error, Client);
}
return String.Format(bot.Localization.clResourceManager.getText("Commands.DownloadTexture.Saved"), Asset.AssetID, Asset.Image.Width, Asset.Image.Height);
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Assets.Image.FailDecode"), TextureID.ToString());
}
}
else if (resultState == TextureRequestState.NotFound)
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.DownloadTexture.NotFound"), TextureID.ToString());
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Assets.Image.FailDownload"), TextureID, resultState);
}
}
else
{
return bot.Localization.clResourceManager.getText("Commands.DownloadTexture.Timeout");
}
}
else
{
return bot.Localization.clResourceManager.getText("Commands.DownloadTexture.Usage");
}
}
private void Assets_OnImageReceived(TextureRequestState state, AssetTexture asset)
{
resultState = state;
Asset = asset;
DownloadHandle.Set();
}
/*private void Assets_OnImageReceiveProgress(UUID image, int lastPacket, int recieved, int total)
{
bot.Console.WriteLine(String.Format("Textura {0}: Recibidos {1} / {2} bytes", image, recieved, total));
}*/
}
}

View File

@@ -0,0 +1,108 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : SoundsCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.IO;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
using System.Collections.Generic;
public class SoundsCommand : Command
{
Dictionary<UUID, UUID> alreadyRequested = new Dictionary<UUID, UUID>();
bool enabled = false;
public SoundsCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "sounds";
base.Description = bot.Localization.clResourceManager.getText("Commands.Sounds.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Textures.Usage");
enabled = SecondLifeBot.Account.LoginDetails.BotConfig.GetSounds;
SecondLifeBot.Sound.SoundTrigger += new EventHandler<SoundTriggerEventArgs>(Sound_SoundTrigger);
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.Sounds.Usage");
if (args[0].ToLower() == "on")
{
enabled = true;
return bot.Localization.clResourceManager.getText("Commands.Sounds.Enabled");
}
else if (args[0].ToLower() == "off")
{
enabled = false;
return bot.Localization.clResourceManager.getText("Commands.Sounds.Disabled");
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Sounds.Usage");
}
}
void Sound_SoundTrigger(object sender, SoundTriggerEventArgs e)
{
if (enabled && base.Client.Account.LoginDetails.BotConfig.GetTextures)
{
#if DEBUG
bot.Console.WriteLine(this.Client, "GETTING SOUND: Gain: {0}, Object: {1}, Owner: {2}, Parent: {3}, Position: {4}, Region: {5}, ID: {6}",
e.Gain.ToString(), e.ObjectID.ToString(), e.OwnerID.ToString(), e.ParentID.ToString(),
e.Position.ToString(), e.RegionHandle.ToString(), e.SoundID.ToString());
#endif
if (!System.IO.File.Exists("./sounds/" + e.SoundID.ToString() + ".ogg"))
base.Client.Assets.RequestAsset(e.SoundID, AssetType.Sound, true, Assets_OnSoundReceived);
}
}
public void Assets_OnSoundReceived(AssetDownload transfer, Asset asset)
{
if (transfer.Success)
{
if (!System.IO.Directory.Exists("./sounds"))
System.IO.Directory.CreateDirectory("./sounds");
System.IO.File.WriteAllBytes("./sounds/" + asset.AssetID.ToString() + ".ogg", asset.AssetData);
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Sounds.Downloaded"), asset.AssetID.ToString(), asset.AssetData.Length);
}
else
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Sounds.Failed"), transfer.AssetID, transfer.Status);
}
}
}
}

View File

@@ -0,0 +1,182 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : TexturesCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.IO;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
using System.Collections.Generic;
public class TexturesCommand : Command
{
Dictionary<UUID, UUID> alreadyRequested = new Dictionary<UUID, UUID>();
bool enabled = false;
public TexturesCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "textures";
base.Description = bot.Localization.clResourceManager.getText("Commands.Textures.Description") + " " + bot.Localization.clResourceManager.getText("Commands.Textures.Usage");
enabled = SecondLifeBot.Account.LoginDetails.BotConfig.GetTextures;
SecondLifeBot.Objects.ObjectUpdate += new EventHandler<PrimEventArgs>(Objects_OnNewPrim);
SecondLifeBot.Objects.AvatarUpdate += Objects_OnNewAvatar;
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.Textures.Usage");
if (args[0].ToLower() == "on")
{
enabled = true;
return bot.Localization.clResourceManager.getText("Commands.Textures.Enabled");
}
else if (args[0].ToLower() == "off")
{
enabled = false;
return bot.Localization.clResourceManager.getText("Commands.Textures.Disabled");
}
else
{
return bot.Localization.clResourceManager.getText("Commands.Textures.Usage");
}
}
void Objects_OnNewAvatar(object sender, AvatarUpdateEventArgs e)
{
if (enabled && base.Client.Account.LoginDetails.BotConfig.GetTextures)
{
// Search this avatar for textures
for (int i = 0; i < e.Avatar.Textures.FaceTextures.Length; i++)
{
Primitive.TextureEntryFace face = e.Avatar.Textures.FaceTextures[i];
if (face != null)
{
if (!alreadyRequested.ContainsKey(face.TextureID))
{
alreadyRequested[face.TextureID] = face.TextureID;
// Determine if this is a baked outfit texture or a normal texture
ImageType type = ImageType.Normal;
AvatarTextureIndex index = (AvatarTextureIndex)i;
switch (index)
{
case AvatarTextureIndex.EyesBaked:
case AvatarTextureIndex.HeadBaked:
case AvatarTextureIndex.LowerBaked:
case AvatarTextureIndex.SkirtBaked:
case AvatarTextureIndex.UpperBaked:
type = ImageType.Baked;
break;
}
if (!File.Exists("textures/" + face.TextureID + ".jp2"))
Client.Assets.RequestImage(face.TextureID, type, Assets_OnImageReceived);
}
}
}
}
}
void Objects_OnNewPrim(object sender, PrimEventArgs e)
{
Primitive prim = e.Prim;
if (enabled && base.Client.Account.LoginDetails.BotConfig.GetTextures)
{
// Search this prim for textures
for (int i = 0; i < prim.Textures.FaceTextures.Length; i++)
{
Primitive.TextureEntryFace face = prim.Textures.FaceTextures[i];
if (face != null)
{
if (!alreadyRequested.ContainsKey(face.TextureID))
{
alreadyRequested[face.TextureID] = face.TextureID;
if (!File.Exists("textures/" + face.TextureID + ".jp2"))
Client.Assets.RequestImage(face.TextureID, ImageType.Normal, Assets_OnImageReceived);
}
}
}
}
}
private void Assets_OnImageReceived(TextureRequestState state, AssetTexture asset)
{
if (state == TextureRequestState.Finished && enabled && alreadyRequested.ContainsKey(asset.AssetID))
{
if (state == TextureRequestState.Finished)
{
if (!Directory.Exists("textures"))
Directory.CreateDirectory("textures");
try
{
File.WriteAllBytes("textures/" + asset.AssetID + ".jp2", asset.AssetData);
}
catch (Exception ex)
{
bot.Console.WriteLine(ex.Message, Helpers.LogLevel.Error, Client);
}
if (asset.Decode())
{
try
{
File.WriteAllBytes("textures/" + asset.AssetID + ".tga", asset.Image.ExportTGA());
}
catch (Exception ex)
{
bot.Console.WriteLine(ex.Message, Helpers.LogLevel.Error, Client);
}
}
else
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Assets.Image.FailDecode"), asset.AssetID);
}
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Assets.Image.Downloaded"), asset.AssetID, asset.AssetData.Length);
}
else
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Assets.Image.FailDownload"), asset.AssetID, state);
}
}
}
}

View File

@@ -0,0 +1,53 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : DilationCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class DilationCommand : Command
{
public DilationCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "dilation";
base.Description = bot.Localization.clResourceManager.getText("Commands.Dilation.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.Dilation.Dilation"), Client.Network.CurrentSim.Stats.Dilation.ToString());
}
}
}

View File

@@ -0,0 +1,135 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : DownloadTerrainCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.IO;
using System.Collections.Generic;
using System.Threading;
using OpenMetaverse;
public class DownloadTerrainCommand : Command
{
/// <summary>
/// Create a Synchronization event object
/// </summary>
private static AutoResetEvent xferTimeout = new AutoResetEvent(false);
/// <summary>A string we use to report the result of the request with.</summary>
private static System.Text.StringBuilder result = new System.Text.StringBuilder();
private static string fileName;
/// <summary>
/// Download a simulators raw terrain data and save it to a file
/// </summary>
/// <param name="testClient"></param>
public DownloadTerrainCommand(SecondLifeBot SecondLifeBot)
{
Name = "downloadterrain";
Description = bot.Localization.clResourceManager.getText("Commands.DownloadTerrain.Description") + " " + bot.Localization.clResourceManager.getText("Commands.DownloadTerrain.Usage");
}
/// <summary>
/// Execute the application
/// </summary>
/// <param name="args">arguments passed to this module</param>
/// <param name="fromAgentID">The ID of the avatar sending the request</param>
/// <returns></returns>
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
int timeout = 120000; // default the timeout to 2 minutes
fileName = "terrain/" + Client.Network.CurrentSim.Name + ".raw";
if (args.Length > 0 && int.TryParse(args[0], out timeout) != true)
return bot.Localization.clResourceManager.getText("Commands.DownloadTerrain.Usage");
// Create a delegate which will be fired when the simulator receives our download request
// Starts the actual transfer request
AssetManager.InitiateDownloadCallback initiateDownloadDelegate = delegate(string simFilename, string viewerFileName)
{
Client.Assets.RequestAssetXfer(simFilename, false, false, UUID.Zero, AssetType.Unknown, false);
};
// Subscribe to the event that will tell us the status of the download
Client.Assets.OnXferReceived += new AssetManager.XferReceivedCallback(Assets_OnXferReceived);
// subscribe to the event which tells us when the simulator has received our request
Client.Assets.OnInitiateDownload += initiateDownloadDelegate;
// configure request to tell the simulator to send us the file
List<string> parameters = new List<string>();
parameters.Add("download filename");
parameters.Add(fileName);
// send the request
Client.Estate.EstateOwnerMessage("terrain", parameters);
// wait for (timeout) seconds for the request to complete (defaults 2 minutes)
if (!xferTimeout.WaitOne(timeout, false))
{
result.Append(bot.Localization.clResourceManager.getText("Commands.DownloadTerrain.Timeout"));
}
// unsubscribe from events
Client.Assets.OnInitiateDownload -= initiateDownloadDelegate;
Client.Assets.OnXferReceived -= new AssetManager.XferReceivedCallback(Assets_OnXferReceived);
// return the result
return result.ToString();
}
/// <summary>
/// Handle the reply to the OnXferReceived event
/// </summary>
/// <param name="xfer"></param>
private void Assets_OnXferReceived(XferDownload xfer)
{
if (xfer.Success)
{
// set the result message
result.AppendFormat(bot.Localization.clResourceManager.getText("Commands.DownloadTerrain.Success"), xfer.Filename, xfer.Size, fileName);
// write the file to disk
FileStream stream = new FileStream(fileName, FileMode.Create);
BinaryWriter w = new BinaryWriter(stream);
w.Write(xfer.AssetData);
w.Close();
// tell the application we've gotten the file
xferTimeout.Set();
}
}
}
}

View File

@@ -0,0 +1,84 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : RegionInfoCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Text;
public class RegionInfoCommand : Command
{
public RegionInfoCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "regioninfo";
base.Description = bot.Localization.clResourceManager.getText("Commands.RegionInfo.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
StringBuilder output = new StringBuilder();
output.AppendLine(Client.Network.CurrentSim.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.UUID"));
output.AppendLine(Client.Network.CurrentSim.ID.ToString());
uint x, y;
Utils.LongToUInts(Client.Network.CurrentSim.Handle, out x, out y);
output.AppendLine(String.Format(bot.Localization.clResourceManager.getText("Commands.RegionInfo.Handle"), Client.Network.CurrentSim.Handle, x, y));
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.Access"));
output.AppendLine(Client.Network.CurrentSim.Access.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.Flags"));
output.AppendLine(Client.Network.CurrentSim.Flags.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.TerrainBase0"));
output.AppendLine(Client.Network.CurrentSim.TerrainBase0.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.TerrainBase1"));
output.AppendLine(Client.Network.CurrentSim.TerrainBase1.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.TerrainBase2"));
output.AppendLine(Client.Network.CurrentSim.TerrainBase2.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.TerrainBase3"));
output.AppendLine(Client.Network.CurrentSim.TerrainBase3.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.TerrainDetail0"));
output.AppendLine(Client.Network.CurrentSim.TerrainDetail0.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.TerrainDetail1"));
output.AppendLine(Client.Network.CurrentSim.TerrainDetail1.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.TerrainDetail2"));
output.AppendLine(Client.Network.CurrentSim.TerrainDetail2.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.TerrainDetail3"));
output.AppendLine(Client.Network.CurrentSim.TerrainDetail3.ToString());
output.Append(bot.Localization.clResourceManager.getText("Commands.RegionInfo.WaterHeight"));
output.AppendLine(Client.Network.CurrentSim.WaterHeight.ToString());
return output.ToString();
}
}
}

View File

@@ -0,0 +1,79 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : StatsCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Text;
public class StatsCommand : Command
{
public StatsCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "stats";
base.Description = bot.Localization.clResourceManager.getText("Commands.Stats.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
StringBuilder output = new StringBuilder();
lock (Client.Network.Simulators)
{
for (int i = 0; i < Client.Network.Simulators.Count; i++)
{
Simulator sim = Client.Network.Simulators[i];
output.AppendLine(String.Format(
bot.Localization.clResourceManager.getText("Commands.Stats.Info1"),
sim.ToString(), sim.Stats.Dilation, sim.Stats.IncomingBPS, sim.Stats.OutgoingBPS,
sim.Stats.ResentPackets, sim.Stats.ReceivedResends));
}
}
Simulator csim = Client.Network.CurrentSim;
output.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Stats.Packets"), Client.Network.InboxCount);
output.AppendLine(String.Format(bot.Localization.clResourceManager.getText("Commands.Stats.Info2"),
csim.Stats.FPS, csim.Stats.PhysicsFPS, csim.Stats.AgentUpdates, csim.Stats.Objects, csim.Stats.ScriptedObjects));
output.AppendLine(String.Format(bot.Localization.clResourceManager.getText("Commands.Stats.Info3"),
csim.Stats.FrameTime, csim.Stats.NetTime, csim.Stats.ImageTime, csim.Stats.PhysicsTime, csim.Stats.ScriptTime, csim.Stats.OtherTime));
output.AppendLine(String.Format(bot.Localization.clResourceManager.getText("Commands.Stats.Info4"),
csim.Stats.Agents, csim.Stats.ChildAgents, csim.Stats.ActiveScripts));
return output.ToString();
}
}
}

View File

@@ -0,0 +1,118 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : UploadRawTerrainCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.IO;
using System.Collections.Generic;
using System.Threading;
using OpenMetaverse;
public class UploadRawTerrainCommand : Command
{
System.Threading.AutoResetEvent WaitForUploadComplete = new System.Threading.AutoResetEvent(false);
/// <summary>
/// Download a simulators raw terrain data and save it to a file
/// </summary>
/// <param name="testClient"></param>
public UploadRawTerrainCommand(SecondLifeBot SecondLifeBot)
{
Name = "uploadterrain";
Description = bot.Localization.clResourceManager.getText("Commands.UploadRawTerrain.Description") + " " + bot.Localization.clResourceManager.getText("Commands.UploadRawTerrain.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
string fileName = String.Empty;
if (args.Length != 1)
return bot.Localization.clResourceManager.getText("Commands.UploadRawTerrain.Usage");
fileName = args[0];
if (!System.IO.File.Exists(fileName))
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.UploadRawTerrain.FileNotFound"), fileName);
}
// Setup callbacks for upload request reply and progress indicator
// so we can detect when the upload is complete
Client.Assets.OnUploadProgress += new AssetManager.UploadProgressCallback(Assets_OnUploadProgress);
byte[] fileData = File.ReadAllBytes(fileName);
Client.Estate.UploadTerrain(fileData, fileName);
// Wait for upload to complete. Upload request is fired in callback from first request
if (!WaitForUploadComplete.WaitOne(120000, false))
{
Cleanup();
return bot.Localization.clResourceManager.getText("Commands.UploadRawTerrain.Timeout");
}
else
{
Cleanup();
return bot.Localization.clResourceManager.getText("Commands.UploadRawTerrain.Success");
}
}
/// <summary>
/// Unregister previously subscribed event handlers
/// </summary>
private void Cleanup()
{
Client.Assets.OnUploadProgress -= new AssetManager.UploadProgressCallback(Assets_OnUploadProgress);
}
/// <summary>
///
/// </summary>
/// <param name="upload"></param>
void Assets_OnUploadProgress(AssetUpload upload)
{
if (upload.Transferred == upload.Size)
{
WaitForUploadComplete.Set();
}
else
{
//Console.WriteLine("Progress: {0}/{1} {2}/{3} {4}", upload.XferID, upload.ID, upload.Transferred, upload.Size, upload.Success);
bot.Console.WriteLine(".");
}
}
}
}

View File

@@ -0,0 +1,83 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AgentLocationsCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Text;
public class AgentLocationsCommand : Command
{
public AgentLocationsCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "agentlocations";
base.Description = bot.Localization.clResourceManager.getText("Commands.AgentLocations.Description") + " " + bot.Localization.clResourceManager.getText("Commands.AgentLocations.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
ulong regionHandle;
if (args.Length == 0)
regionHandle = Client.Network.CurrentSim.Handle;
else if (!(args.Length == 1 && UInt64.TryParse(args[0], out regionHandle)))
return bot.Localization.clResourceManager.getText("Commands.AgentLocations.Usage");
List<MapItem> items = Client.Grid.MapItems(regionHandle, GridItemType.AgentLocations,
GridLayerType.Objects, 1000 * 20);
if (items != null)
{
StringBuilder ret = new StringBuilder();
ret.AppendLine(bot.Localization.clResourceManager.getText("Commands.AgentLocations.Locations"));
for (int i = 0; i < items.Count; i++)
{
MapAgentLocation location = (MapAgentLocation)items[i];
ret.AppendLine(String.Format(bot.Localization.clResourceManager.getText("Commands.AgentLocations.Avatar"), location.AvatarCount, location.LocalX,
location.LocalY));
}
return ret.ToString();
}
else
{
return bot.Localization.clResourceManager.getText("Commands.AgentLocations.Fail");
}
}
}
}

View File

@@ -0,0 +1,74 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : FindSimCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class FindSimCommand : Command
{
public FindSimCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "findsim";
base.Description = bot.Localization.clResourceManager.getText("Commands.FindSim.Description") + " " + bot.Localization.clResourceManager.getText("Commands.FindSim.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 1)
return bot.Localization.clResourceManager.getText("Commands.FindSim.Usage");
// Build the simulator name from the args list
string simName = string.Empty;
for (int i = 0; i < args.Length; i++)
simName += args[i] + " ";
simName = simName.TrimEnd().ToLower();
//if (!GridDataCached[Client])
//{
// Client.Grid.RequestAllSims(GridManager.MapLayerType.Objects);
// System.Threading.Thread.Sleep(5000);
// GridDataCached[Client] = true;
//}
GridRegion region;
if (Client.Grid.GetGridRegion(simName, GridLayerType.Objects, out region))
return String.Format(bot.Localization.clResourceManager.getText("Commands.FindSim.Info"), region.Name, region.RegionHandle, region.X, region.Y);
else
return String.Format(bot.Localization.clResourceManager.getText("Commands.FindSim.LookupFail"), simName);
}
}
}

View File

@@ -0,0 +1,61 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GridLayerCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class GridLayerCommand : Command
{
public GridLayerCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "gridlayer";
base.Description = bot.Localization.clResourceManager.getText("Commands.GridLayer.Description");
SecondLifeBot.Grid.GridLayer += Grid_GridLayer;
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
base.Client.Grid.RequestMapLayer(GridLayerType.Objects);
return bot.Localization.clResourceManager.getText("Commands.GridLayer.Ready");
}
void Grid_GridLayer(object sender, GridLayerEventArgs e)
{
bot.Console.WriteLine(String.Format(bot.Localization.clResourceManager.getText("Commands.GridLayer.Layer"),
e.Layer.ImageID.ToString(), e.Layer.Bottom, e.Layer.Left, e.Layer.Top, e.Layer.Right));
}
}
}

View File

@@ -0,0 +1,54 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GridMapCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
public class GridMapCommand : Command
{
public GridMapCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "gridmap";
base.Description = bot.Localization.clResourceManager.getText("Commands.GridMap.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
Client.Grid.RequestMainlandSims(GridLayerType.Objects);
return bot.Localization.clResourceManager.getText("Commands.GridMap.Ready");
}
}
}

View File

@@ -0,0 +1,122 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ActivateGroupCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System;
using System.Collections.Generic;
using System.Threading;
public class ActivateGroupCommand : Command
{
ManualResetEvent GroupsEvent = new ManualResetEvent(false);
string activeGroup;
public ActivateGroupCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "activategroup";
base.Description = bot.Localization.clResourceManager.getText("Commands.ActivateGroup.Description") + " " + bot.Localization.clResourceManager.getText("Commands.ActivateGroup.Usage");
}
private void AgentDataUpdateHandler(object sender, PacketReceivedEventArgs e)
{
AgentDataUpdatePacket p = (AgentDataUpdatePacket)e.Packet;
if (p.AgentData.AgentID == Client.Self.AgentID)
{
activeGroup = Utils.BytesToString(p.AgentData.GroupName) + " ( " + Utils.BytesToString(p.AgentData.GroupTitle) + " )";
GroupsEvent.Set();
}
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
bool isGroupID = false;
if (args.Length < 1)
return Description;
activeGroup = string.Empty;
string groupName = String.Empty;
for (int i = 0; i < args.Length; i++)
groupName += args[i] + " ";
groupName = groupName.Trim();
Client.Groups.RequestCurrentGroups();
GroupsEvent.Reset();
string realGroupName = "";
UUID groupUUID = Client.GroupName2UUID(groupName);
if (UUID.Zero != groupUUID)
{
EventHandler<PacketReceivedEventArgs> pcallback = AgentDataUpdateHandler;
Client.Network.RegisterCallback(PacketType.AgentDataUpdate, pcallback);
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.ActivateGroup.Setting"), groupName);
Client.Groups.ActivateGroup(groupUUID);
GroupsEvent.WaitOne(30000, false);
Client.Network.UnregisterCallback(PacketType.AgentDataUpdate, pcallback);
GroupsEvent.Reset();
/* A.Biondi
* TODO: Handle titles choosing.
*/
Client.key2Name(groupUUID, out realGroupName, out isGroupID);
if (!isGroupID)
return String.Format(bot.Localization.clResourceManager.getText("Commands.GroupEject.AvatarID"), groupUUID);
if (realGroupName == "")
realGroupName = groupUUID.ToString();
if (String.IsNullOrEmpty(activeGroup))
return String.Format(bot.Localization.clResourceManager.getText("Commands.ActivateGroup.Failed"), Client.ToString(),
realGroupName);
return String.Format(bot.Localization.clResourceManager.getText("Commands.ActivateGroup.Active"), Client.ToString(),
realGroupName);
}
return String.Format(bot.Localization.clResourceManager.getText("Commands.ActivateGroup.NotInGroup"), Client.ToString(),
realGroupName);
return String.Format(bot.Localization.clResourceManager.getText("Commands.ActivateGroup.NoGroups"), Client.ToString());
}
}
}

View File

@@ -0,0 +1,126 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ActivateRoleCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using System.Collections.Generic;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System.Text;
namespace bot.Commands
{
public class ActivateRoleCommand : Command
{
private ManualResetEvent GroupsEvent = new ManualResetEvent(false);
private string GroupName;
private UUID GroupUUID;
private UUID RoleUUID;
private UUID GroupRequestID;
private Dictionary<UUID, GroupRole> GroupRoles;
public ActivateRoleCommand(SecondLifeBot secondLifeBot)
{
Name = "activaterole";
Description = bot.Localization.clResourceManager.getText("Commands.ActivateRole.Description") + " " + bot.Localization.clResourceManager.getText("Commands.ActivateRole.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
bool isGroupKey = false;
if (args.Length > 2 || args.Length < 1)
return bot.Localization.clResourceManager.getText("Commands.ActivateRole.Usage");
if (args.Length == 2)
{
if (!UUID.TryParse(args[1], out GroupUUID))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.ExpectedGroupID");
}
else
{
if (Client.Self.ActiveGroup == UUID.Zero)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.NoGroupActive");
GroupUUID = Client.Self.ActiveGroup;
}
if (!UUID.TryParse(args[0], out RoleUUID))
return bot.Localization.clResourceManager.getText("Commands.AddToRole.ExpectedRoleID");
if (!Client.key2Name(GroupUUID, out GroupName, out isGroupKey))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.GroupNotFound");
if (!isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.AvatarID");
Client.ReloadGroupsCache();
if (Client.GroupsCache == null)
return bot.Localization.clResourceManager.getText("Commands.Groups.CacheFailed");
if (Client.GroupsCache.Count == 0)
return bot.Localization.clResourceManager.getText("Commands.Groups.NoGroups");
if (!Client.GroupsCache.ContainsKey(GroupUUID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.AddToRole.NotMemberSelf"), GroupName);
Client.Groups.GroupRoleDataReply += Groups_GroupRoles;
GroupRequestID = Client.Groups.RequestGroupRoles(GroupUUID);
if (!GroupsEvent.WaitOne(30000, false))
{
GroupsEvent.Reset();
Client.Groups.GroupRoleDataReply -= Groups_GroupRoles;
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.CannotRoles");
}
else
{
GroupsEvent.Reset();
Client.Groups.GroupRoleDataReply -= Groups_GroupRoles;
}
GroupRole chosenRole;
if (!GroupRoles.TryGetValue(RoleUUID, out chosenRole))
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.NotRole");
Client.Groups.ActivateTitle(GroupUUID, RoleUUID);
return String.Format(bot.Localization.clResourceManager.getText("Commands.ActivateRole.Activating"), chosenRole.Name, GroupName);
}
private void Groups_GroupRoles(object sender, GroupRolesDataReplyEventArgs e)
{
if (e.RequestID == GroupRequestID)
{
GroupRoles = e.Roles;
GroupsEvent.Set();
}
}
}
}

View File

@@ -0,0 +1,163 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : AddToRoleCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using System.Collections.Generic;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System.Text;
namespace bot.Commands
{
public class AddToRoleCommand : Command
{
private ManualResetEvent GroupsEvent = new ManualResetEvent(false);
private string GroupName, AvatarName;
private UUID GroupUUID;
private UUID RoleUUID;
private UUID GroupRequestID;
private UUID AvatarUUID;
private Dictionary<UUID, GroupRole> GroupRoles;
private Dictionary<UUID, GroupMember> GroupMembers;
public AddToRoleCommand(SecondLifeBot secondLifeBot)
{
Name = "addtorole";
Description = bot.Localization.clResourceManager.getText("Commands.AddToRole.Description") + " " + bot.Localization.clResourceManager.getText("Commands.AddToRole.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
bool isGroupKey = false;
if (args.Length > 3 || args.Length < 2)
return bot.Localization.clResourceManager.getText("Commands.AddToRole.Usage");
if (args.Length == 3)
{
if (!UUID.TryParse(args[2], out GroupUUID))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.ExpectedGroupID");
}
else
{
if (Client.Self.ActiveGroup == UUID.Zero)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.NoGroupActive");
GroupUUID = Client.Self.ActiveGroup;
}
if (!UUID.TryParse(args[0], out RoleUUID))
return bot.Localization.clResourceManager.getText("Commands.AddToRole.ExpectedRoleID");
if (!UUID.TryParse(args[1], out AvatarUUID))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.AvatarID");
if (!Client.key2Name(GroupUUID, out GroupName, out isGroupKey))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.GroupNotFound");
if (!isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.AvatarID");
if (!Client.key2Name(AvatarUUID, out AvatarName, out isGroupKey))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.AvatarNotFound");
if (isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.GroupID");
Client.ReloadGroupsCache();
if (Client.GroupsCache == null)
return bot.Localization.clResourceManager.getText("Commands.Groups.CacheFailed");
if (Client.GroupsCache.Count == 0)
return bot.Localization.clResourceManager.getText("Commands.Groups.NoGroups");
if (!Client.GroupsCache.ContainsKey(GroupUUID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.AddToRole.NotMemberSelf"), GroupName);
Client.Groups.GroupMembersReply += GroupMembersHandler;
GroupRequestID = Client.Groups.RequestGroupMembers(GroupUUID);
if (!GroupsEvent.WaitOne(30000, false))
{
GroupsEvent.Reset();
Client.Groups.GroupMembersReply -= GroupMembersHandler;
return "Unable to get group members.";
}
else
{
GroupsEvent.Reset();
Client.Groups.GroupMembersReply -= GroupMembersHandler;
}
GroupMember chosenMember;
if (!GroupMembers.TryGetValue(AvatarUUID, out chosenMember))
return String.Format(bot.Localization.clResourceManager.getText("Commands.AddToRole.NotMember"), AvatarName, GroupName);
Client.Groups.GroupRoleDataReply += Groups_GroupRoles;
GroupRequestID = Client.Groups.RequestGroupRoles(GroupUUID);
if (!GroupsEvent.WaitOne(30000, false))
{
GroupsEvent.Reset();
Client.Groups.GroupRoleDataReply -= Groups_GroupRoles;
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.CannotRoles");
}
else
{
GroupsEvent.Reset();
Client.Groups.GroupRoleDataReply -= Groups_GroupRoles;
}
GroupRole chosenRole;
if (!GroupRoles.TryGetValue(RoleUUID, out chosenRole))
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.NotRole");
Client.Groups.AddToRole(GroupUUID, RoleUUID, AvatarUUID);
return String.Format(bot.Localization.clResourceManager.getText("Commands.AddToRole.Adding"), AvatarName, chosenRole.Name, GroupName);
}
private void GroupMembersHandler(object sender, GroupMembersReplyEventArgs e)
{
if (e.RequestID == GroupRequestID)
{
GroupMembers = e.Members;
GroupsEvent.Set();
}
}
private void Groups_GroupRoles(object sender, GroupRolesDataReplyEventArgs e)
{
if (e.RequestID == GroupRequestID)
{
GroupRoles = e.Roles;
GroupsEvent.Set();
}
}
}
}

View File

@@ -0,0 +1,119 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GroupEjectCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using System.Collections.Generic;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System.Text;
namespace bot.Commands
{
public class GroupEjectCommand : Command
{
private ManualResetEvent GroupsEvent = new ManualResetEvent(false);
private string GroupName;
private UUID GroupUUID;
private UUID GroupRequestID;
private Dictionary<UUID, GroupMember> GroupMembers;
public GroupEjectCommand(SecondLifeBot secondLifeBot)
{
Name = "groupeject";
Description = bot.Localization.clResourceManager.getText("Commands.GroupEject.Description") + " " + bot.Localization.clResourceManager.getText("Commands.GroupEject.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
UUID avatarID;
bool isGroupKey;
string avatarName;
GroupMembers = new Dictionary<UUID, GroupMember>();
GroupsEvent.Reset();
if (args.Length < 1)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.Usage");
if (args.Length == 2)
{
if (!UUID.TryParse(args[1], out GroupUUID))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.ExpectedGroupID");
if (!Client.key2Name(GroupUUID, out GroupName, out isGroupKey))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.GroupNotFound");
if (!isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.AvatarID");
}
else
{
if (Client.Self.ActiveGroup == UUID.Zero)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.NoGroupActive");
GroupUUID = Client.Self.ActiveGroup;
}
if (!UUID.TryParse(args[0], out avatarID))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.ExpectedAvatarID");
if (!Client.key2Name(avatarID, out avatarName, out isGroupKey))
return bot.Localization.clResourceManager.getText("Commands.GroupEject.AvatarNotFound");
if (isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.GroupEject.GroupID");
Client.Groups.GroupMembersReply += GroupMembersHandler;
GroupRequestID = Client.Groups.RequestGroupMembers(GroupUUID);
if (!GroupsEvent.WaitOne(30000, false))
{
Client.Groups.GroupMembersReply -= GroupMembersHandler;
return bot.Localization.clResourceManager.getText("Commands.GroupEject.ErrorMembers");
}
Client.Groups.GroupMembersReply -= GroupMembersHandler;
if (!GroupMembers.ContainsKey(avatarID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.GroupEject.NotMember"), avatarName, GroupName);
Client.Groups.EjectUser(GroupUUID, avatarID);
return String.Format(bot.Localization.clResourceManager.getText("Commands.GroupEject.Ejected"), avatarName, GroupName);
}
private void GroupMembersHandler(object sender, GroupMembersReplyEventArgs e)
{
if (e.RequestID == GroupRequestID)
{
GroupMembers = e.Members;
GroupsEvent.Set();
}
}
}
}

View File

@@ -0,0 +1,124 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GroupInviteCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using System.Collections.Generic;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System.Text;
namespace bot.Commands
{
public class GroupInviteCommand : Command
{
private ManualResetEvent GroupsEvent = new ManualResetEvent(false);
private UUID roleID;
private UUID GroupRequestID;
private Dictionary<UUID, GroupRole> Roles;
public GroupInviteCommand(SecondLifeBot secondLifeBot)
{
Name = "invitegroup";
Description = bot.Localization.clResourceManager.getText("Commands.GroupInvite.Description") + " " + bot.Localization.clResourceManager.getText("Commands.GroupInvite.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 1)
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.Usage");
UUID avatarID;
string avatarName, groupName;
bool isGroupKey = false;
Roles = new Dictionary<UUID,GroupRole>();
if (!UUID.TryParse(args[0], out avatarID))
return Description;
roleID = UUID.Zero;
if (args.Length == 2)
if (!UUID.TryParse(args[1], out roleID))
return Description;
if (Client.Self.ActiveGroup == UUID.Zero)
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.NoGroupActive");
if (!Client.key2Name(avatarID, out avatarName, out isGroupKey))
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.AvNotFound");
if (isGroupKey)
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.CannotGroup");
Client.key2Name(Client.Self.ActiveGroup, out groupName);
Client.Groups.GroupRoleDataReply += Groups_GroupRoles;
GroupRequestID = Client.Groups.RequestGroupRoles(Client.Self.ActiveGroup);
if (!GroupsEvent.WaitOne(30000, false))
{
GroupsEvent.Reset();
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.CannotRoles");
}
else
{
GroupsEvent.Reset();
}
Client.Groups.GroupRoleDataReply -= Groups_GroupRoles;
if (!Roles.ContainsKey(roleID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.GroupInvite.NotRole"), roleID);
List<UUID> inviteRoles = new List<UUID>();
inviteRoles.Add(roleID);
GroupRole role;
if (!Roles.TryGetValue(roleID, out role))
return bot.Localization.clResourceManager.getText("Commands.GroupInvite.ErrorRole");
Client.Groups.Invite(Client.Self.ActiveGroup, inviteRoles, avatarID);
return String.Format(bot.Localization.clResourceManager.getText("Commands.GroupInvite.Inviting"), avatarName, groupName, role.Name);
}
void Groups_GroupRoles(object sender, GroupRolesDataReplyEventArgs e)
{
if (e.RequestID == GroupRequestID)
{
Roles = e.Roles;
GroupsEvent.Set();
}
}
}
}

View File

@@ -0,0 +1,108 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GroupMembersCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using System.Collections.Generic;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System.Text;
namespace bot.Commands
{
public class GroupMembersCommand : Command
{
private ManualResetEvent GroupsEvent = new ManualResetEvent(false);
private string GroupName;
private UUID GroupUUID;
private UUID GroupRequestID;
StringBuilder sb;
public GroupMembersCommand(SecondLifeBot secondLifeBot)
{
Name = "groupmembers";
Description = bot.Localization.clResourceManager.getText("Commands.GroupMembers.Description") + " " + bot.Localization.clResourceManager.getText("Commands.GroupMembers.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 1)
return bot.Localization.clResourceManager.getText("Commands.GroupMembers.Usage");
sb = new StringBuilder();
GroupName = String.Empty;
for (int i = 0; i < args.Length; i++)
GroupName += args[i] + " ";
GroupName = GroupName.Trim();
GroupUUID = Client.GroupName2UUID(GroupName);
if (UUID.Zero != GroupUUID)
{
Client.Groups.GroupMembersReply += GroupMembersHandler;
GroupRequestID = Client.Groups.RequestGroupMembers(GroupUUID);
GroupsEvent.WaitOne(30000, false);
GroupsEvent.Reset();
Client.Groups.GroupMembersReply -= GroupMembersHandler;
return sb.ToString();
}
return String.Format(bot.Localization.clResourceManager.getText("Commands.GroupMembers.NotMember"), Client.ToString(), GroupName);
}
private void GroupMembersHandler(object sender, GroupMembersReplyEventArgs e)
{
if (e.RequestID == GroupRequestID)
{
sb.AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupMembers.GotMembers"), Client.ToString()).AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.RequestID"), e.RequestID).AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.GroupName"), GroupName).AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.GroupID"), GroupUUID).AppendLine();
if (e.Members.Count > 0)
foreach (KeyValuePair<UUID, GroupMember> member in e.Members)
{
string MemberName;
if (!Client.key2Name(member.Key, out MemberName))
MemberName = bot.Localization.clResourceManager.getText("Commands.PrimInfo.Unknown");
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupMembers.Member"), MemberName, member.Key.ToString()).AppendLine();
}
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupMembers.MemberCount"), e.Members.Count).AppendLine();
GroupsEvent.Set();
}
}
}
}

View File

@@ -0,0 +1,98 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GroupRolesCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
using System;
using System.Collections.Generic;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Packets;
using System.Text;
namespace bot.Commands
{
public class GroupRolesCommand : Command
{
private ManualResetEvent GroupsEvent = new ManualResetEvent(false);
private string GroupName;
private UUID GroupUUID;
private UUID GroupRequestID;
StringBuilder sb;
public GroupRolesCommand(SecondLifeBot secondLifeBot)
{
Name = "grouproles";
Description = bot.Localization.clResourceManager.getText("Commands.GroupRoles.Description") + " " + bot.Localization.clResourceManager.getText("Commands.GroupRoles.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 1)
return bot.Localization.clResourceManager.getText("Commands.GroupRoles.Usage");
sb = new StringBuilder();
GroupName = String.Empty;
for (int i = 0; i < args.Length; i++)
GroupName += args[i] + " ";
GroupName = GroupName.Trim();
GroupUUID = Client.GroupName2UUID(GroupName);
if (UUID.Zero != GroupUUID)
{
Client.Groups.GroupRoleDataReply += Groups_GroupRoles;
GroupRequestID = Client.Groups.RequestGroupRoles(GroupUUID);
GroupsEvent.WaitOne(30000, false);
GroupsEvent.Reset();
Client.Groups.GroupRoleDataReply -= Groups_GroupRoles;
return sb.ToString();
}
return String.Format(bot.Localization.clResourceManager.getText("Commands.GroupRoles.NoRoles"), Client.ToString(), GroupName);
}
private void Groups_GroupRoles(object sender, GroupRolesDataReplyEventArgs e)
{
if (e.RequestID == GroupRequestID)
{
sb.AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.GotRoles"), Client.ToString()).AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.RequestID"), e.RequestID).AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.GroupName"), GroupName).AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.GroupID"), GroupUUID).AppendLine();
if (e.Roles.Count > 0)
foreach (KeyValuePair<UUID, GroupRole> role in e.Roles)
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.Role"), role.Value.ID, role.Value.Name, role.Value.Title).AppendLine();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.GroupRoles.RoleCount"), e.Roles.Count).AppendLine();
GroupsEvent.Set();
}
}
}
}

View File

@@ -0,0 +1,77 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : GroupsCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
public class GroupsCommand : Command
{
ManualResetEvent GetCurrentGroupsEvent = new ManualResetEvent(false);
Dictionary<UUID, Group> groups = new Dictionary<UUID, Group>();
public GroupsCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "groups";
base.Description = bot.Localization.clResourceManager.getText("Commands.Groups.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
Client.ReloadGroupsCache();
return getGroupsString();
}
string getGroupsString()
{
if (null == Client.GroupsCache)
return bot.Localization.clResourceManager.getText("Commands.Groups.CacheFailed");
if (0 == Client.GroupsCache.Count)
return bot.Localization.clResourceManager.getText("Commands.Groups.NoGroups");
StringBuilder sb = new StringBuilder();
sb.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Groups.GotGroups"), Client.GroupsCache.Count).AppendLine();
foreach (Group group in Client.GroupsCache.Values)
{
sb.AppendLine(group.ID + ", " + group.Name);
}
return sb.ToString();
}
}
}

View File

@@ -0,0 +1,110 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ImGroupCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Threading;
public class ImGroupCommand : Command
{
UUID ToGroupID = UUID.Zero;
ManualResetEvent WaitForSessionStart = new ManualResetEvent(false);
public ImGroupCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "imgroup";
base.Description = bot.Localization.clResourceManager.getText("Commands.IMGroup.Description") + " " + bot.Localization.clResourceManager.getText("Commands.IMGroup.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 2)
return bot.Localization.clResourceManager.getText("Commands.IMGroup.Usage");
if (UUID.TryParse(args[0], out ToGroupID))
{
string message = String.Empty;
for (int ct = 1; ct < args.Length; ct++)
message += args[ct] + " ";
message = message.TrimEnd();
if (message.Length > 1023)
message = message.Remove(1023);
Client.Self.GroupChatJoined += Self_GroupChatJoined;
if (!Client.Self.GroupChatSessions.ContainsKey(ToGroupID))
{
WaitForSessionStart.Reset();
Client.Self.RequestJoinGroupChat(ToGroupID);
}
else
{
WaitForSessionStart.Set();
}
if (WaitForSessionStart.WaitOne(20000, false))
{
Client.Self.InstantMessageGroup(ToGroupID, message);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.IMGroup.Timeout");
}
Client.Self.GroupChatJoined -= Self_GroupChatJoined;
return String.Format(bot.Localization.clResourceManager.getText("Commands.IMGroup.Success"), ToGroupID.ToString(), message);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.IMGroup.Fail");
}
}
void Self_GroupChatJoined(object sender, GroupChatJoinedEventArgs e)
{
if (e.Success)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.IMGroup.Joined"), e.SessionName);
WaitForSessionStart.Set();
}
else
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.IMGroup.JoinFail"));
}
}
}
}

View File

@@ -0,0 +1,169 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : JoinGroupCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Threading;
public class JoinGroupCommand : Command
{
ManualResetEvent GetGroupsSearchEvent = new ManualResetEvent(false);
private UUID queryID = UUID.Zero;
private UUID resolvedGroupID;
private string groupName;
private string resolvedGroupName;
private bool joinedGroup;
public JoinGroupCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "joingroup";
base.Description = bot.Localization.clResourceManager.getText("Commands.JoinGroup.Description") + " " + bot.Localization.clResourceManager.getText("Commands.JoinGroup.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 1)
return Description;
groupName = String.Empty;
resolvedGroupID = UUID.Zero;
resolvedGroupName = String.Empty;
if (args.Length < 2)
{
if (!UUID.TryParse((resolvedGroupName = groupName = args[0]), out resolvedGroupID))
return String.Format(bot.Localization.clResourceManager.getText("Commands.JoinGroup.InvalidUUID"), resolvedGroupName);
}
else
{
for (int i = 0; i < args.Length; i++)
groupName += args[i] + " ";
groupName = groupName.Trim();
Client.Directory.DirGroupsReply += Directory_DirGroups;
queryID = Client.Directory.StartGroupSearch(groupName, 0);
GetGroupsSearchEvent.WaitOne(60000, false);
Client.Directory.DirGroupsReply -= Directory_DirGroups;
GetGroupsSearchEvent.Reset();
}
if (resolvedGroupID == UUID.Zero)
{
if (string.IsNullOrEmpty(resolvedGroupName))
return String.Format(bot.Localization.clResourceManager.getText("Commands.JoinGroup.UUIDNotFound"), groupName);
else
return resolvedGroupName;
}
Client.Groups.GroupJoinedReply += Groups_OnGroupJoined;
Client.Groups.RequestJoinGroup(resolvedGroupID);
/* A.Biondi
* TODO: implement the pay to join procedure.
*/
GetGroupsSearchEvent.WaitOne(60000, false);
Client.Groups.GroupJoinedReply -= Groups_OnGroupJoined;
GetGroupsSearchEvent.Reset();
if (joinedGroup)
return String.Format(bot.Localization.clResourceManager.getText("Commands.JoinGroup.Joined"), resolvedGroupName);
return String.Format(bot.Localization.clResourceManager.getText("Commands.JoinGroup.Failed"), resolvedGroupName);
}
void Groups_OnGroupJoined(object sender, GroupOperationEventArgs e)
{
if (e.Success)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.JoinGroup.Joined"), e.GroupID.ToString());
joinedGroup = true;
}
else
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.JoinGroup.Failed"), e.GroupID.ToString());
joinedGroup = false;
}
}
void Directory_DirGroups(object sender, DirGroupsReplyEventArgs e)
{
if (queryID == e.QueryID)
{
queryID = UUID.Zero;
if (e.MatchedGroups.Count < 1)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.JoinGroup.Empty"));
}
else
{
if (e.MatchedGroups.Count > 1)
{
/* A.Biondi
* The Group search doesn't work as someone could expect...
* It'll give back to you a long list of groups even if the
* searchText (groupName) matches esactly one of the groups
* names present on the server, so we need to check each result.
* UUIDs of the matching groups are written on the console.
*/
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.JoinGroup.Matching") + System.Environment.NewLine);
foreach (DirectoryManager.GroupSearchData groupRetrieved in e.MatchedGroups)
{
bot.Console.WriteLine(groupRetrieved.GroupName + "\t\t\t(" +
Name + " UUID " + groupRetrieved.GroupID.ToString() + ")");
if (groupRetrieved.GroupName.ToLower() == groupName.ToLower())
{
resolvedGroupID = groupRetrieved.GroupID;
resolvedGroupName = groupRetrieved.GroupName;
break;
}
}
if (string.IsNullOrEmpty(resolvedGroupName))
resolvedGroupName = String.Format(bot.Localization.clResourceManager.getText("Commands.JoinGroup.Ambigous"), e.MatchedGroups.Count.ToString());
}
}
GetGroupsSearchEvent.Set();
}
}
}
}

View File

@@ -0,0 +1,96 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : LeaveGroupCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.Threading;
public class LeaveGroupCommand : Command
{
ManualResetEvent GroupsEvent = new ManualResetEvent(false);
Dictionary<UUID, Group> groups = new Dictionary<UUID, Group>();
private bool leftGroup;
public LeaveGroupCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "leavegroup";
base.Description = bot.Localization.clResourceManager.getText("Commands.LeaveGroup.Description") + " " + bot.Localization.clResourceManager.getText("Commands.LeaveGroup.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
if (args.Length < 1)
return Description;
string groupName = String.Empty;
for (int i = 0; i < args.Length; i++)
groupName += args[i] + " ";
groupName = groupName.Trim();
UUID groupUUID = Client.GroupName2UUID(groupName);
if (UUID.Zero != groupUUID)
{
Client.Groups.GroupLeaveReply += Groups_GroupLeft;
Client.Groups.LeaveGroup(groupUUID);
GroupsEvent.WaitOne(30000, false);
Client.Groups.GroupLeaveReply -= Groups_GroupLeft;
GroupsEvent.Reset();
Client.ReloadGroupsCache();
if (leftGroup)
return String.Format(bot.Localization.clResourceManager.getText("Commands.LeaveGroup.Left"), Client.ToString(),
groupName);
return String.Format(bot.Localization.clResourceManager.getText("Commands.LeaveGroup.Failed"), Client.ToString(),
groupName);
}
return String.Format(bot.Localization.clResourceManager.getText("Commands.LeaveGroup.NotInGroup"), Client.ToString(), groupName);
}
void Groups_GroupLeft(object sender, GroupOperationEventArgs e)
{
if (e.Success)
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.LeaveGroup.Left"), Client.ToString(), e.GroupID.ToString());
else
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.LeaveGroup.Failed"), Client.ToString(), e.GroupID.ToString());
leftGroup = e.Success;
GroupsEvent.Set();
}
}
}

View File

@@ -0,0 +1,514 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : BackupCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Text;
using System.Threading;
using OpenMetaverse.Assets;
public class BackupCommand : Command
{
private BackgroundWorker BackupWorker;
private List<QueuedDownloadInfo> CurrentDownloads = new List<QueuedDownloadInfo>(10);
private const int MAX_TRANSFERS = 10;
private Queue<QueuedDownloadInfo> PendingDownloads = new Queue<QueuedDownloadInfo>();
private BackgroundWorker QueueWorker;
private int TextItemErrors;
private int TextItemsFound;
private int TextItemsTransferred;
#region Properties
/// <summary>
/// true if either of the background threads is running
/// </summary>
private bool BackgroundBackupRunning
{
get { return InventoryWalkerRunning || QueueRunnerRunning; }
}
/// <summary>
/// true if the thread walking inventory is running
/// </summary>
private bool InventoryWalkerRunning
{
get { return BackupWorker != null; }
}
/// <summary>
/// true if the thread feeding the queue to the server is running
/// </summary>
private bool QueueRunnerRunning
{
get { return QueueWorker != null; }
}
/// <summary>
/// returns a string summarizing activity
/// </summary>
/// <returns></returns>
private string BackgroundBackupStatus
{
get
{
StringBuilder sbResult = new StringBuilder();
sbResult.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Backup.Running"), Name, BoolToNot(BackgroundBackupRunning));
if (TextItemErrors != 0 || TextItemsFound != 0 || TextItemsTransferred != 0)
{
sbResult.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Backup.Walker"),
Name, BoolToNot(InventoryWalkerRunning), TextItemsFound);
sbResult.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Backup.Transfer"),
Name, BoolToNot(QueueRunnerRunning), TextItemsTransferred, TextItemErrors);
sbResult.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Backup.Queue"),
Name, PendingDownloads.Count, CurrentDownloads.Count);
}
return sbResult.ToString();
}
}
#endregion Properties
public BackupCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "backup";
base.Description = bot.Localization.clResourceManager.getText("Commands.Backup.Description") + " " + String.Format(bot.Localization.clResourceManager.getText("Commands.Backup.Usage"), Name);
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
Program.NBStats.AddStatData(String.Format("{0}: {1} backing up all inventory.", DateTime.Now.ToString(), Client));
StringBuilder sbResult = new StringBuilder();
if (args.Length == 1 && args[0] == "status")
{
return BackgroundBackupStatus;
}
else if (args.Length == 1 && args[0] == "abort")
{
if (!BackgroundBackupRunning)
return BackgroundBackupStatus;
BackupWorker.CancelAsync();
QueueWorker.CancelAsync();
Thread.Sleep(500);
// check status
return BackgroundBackupStatus;
}
else if (args.Length != 2)
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.Backup.Usage"), Name);
}
else if (BackgroundBackupRunning)
{
return BackgroundBackupStatus;
}
QueueWorker = new BackgroundWorker();
QueueWorker.WorkerSupportsCancellation = true;
QueueWorker.DoWork += new DoWorkEventHandler(bwQueueRunner_DoWork);
QueueWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwQueueRunner_RunWorkerCompleted);
QueueWorker.RunWorkerAsync();
BackupWorker = new BackgroundWorker();
BackupWorker.WorkerSupportsCancellation = true;
BackupWorker.DoWork += new DoWorkEventHandler(bwBackup_DoWork);
BackupWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwBackup_RunWorkerCompleted);
BackupWorker.RunWorkerAsync(args);
return bot.Localization.clResourceManager.getText("Commands.Backup.Started");
}
void bwQueueRunner_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
QueueWorker = null;
bot.Console.WriteLine(BackgroundBackupStatus);
}
void bwQueueRunner_DoWork(object sender, DoWorkEventArgs e)
{
TextItemErrors = TextItemsTransferred = 0;
while (QueueWorker.CancellationPending == false)
{
// have any timed out?
if (CurrentDownloads.Count > 0)
{
lock (CurrentDownloads)
{
foreach (QueuedDownloadInfo qdi in CurrentDownloads)
{
if ((qdi.WhenRequested + TimeSpan.FromSeconds(60)) < DateTime.Now)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.Timeout"), Name, qdi.AssetID.ToString());
// submit request again
if (qdi.Type == AssetType.Notecard || qdi.Type == AssetType.LSLText || qdi.Type == AssetType.Texture)
{
if (qdi.Type == AssetType.Texture)
{
Client.Assets.RequestImage(qdi.AssetID, Assets_OnImageReceived);
}
else
{
Client.Assets.RequestInventoryAsset(
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true, Assets_OnAssetReceived);
}
}
else
{
Client.Assets.RequestAsset(qdi.AssetID, qdi.Type, true, Assets_OnAssetReceived);
}
qdi.WhenRequested = DateTime.Now;
qdi.IsRequested = true;
}
}
}
}
if (PendingDownloads.Count != 0)
{
// room in the server queue?
if (CurrentDownloads.Count < MAX_TRANSFERS)
{
// yes
QueuedDownloadInfo qdi = PendingDownloads.Dequeue();
qdi.WhenRequested = DateTime.Now;
qdi.IsRequested = true;
if (qdi.Type == AssetType.Notecard || qdi.Type == AssetType.LSLText || qdi.Type == AssetType.Texture)
{
if (qdi.Type == AssetType.Texture)
{
Client.Assets.RequestImage(qdi.AssetID, Assets_OnImageReceived);
}
else
{
Client.Assets.RequestInventoryAsset(
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true, Assets_OnAssetReceived);
}
}
else
{
Client.Assets.RequestAsset(qdi.AssetID, qdi.Type, true, Assets_OnAssetReceived);
}
lock (CurrentDownloads)
CurrentDownloads.Add(qdi);
}
}
if (CurrentDownloads.Count == 0 && PendingDownloads.Count == 0 && BackupWorker == null)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.AllDone"), Name);
return;
}
Thread.Sleep(100);
}
}
void bwBackup_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.WalkingDone"), Name);
BackupWorker = null;
}
private void bwBackup_DoWork(object sender, DoWorkEventArgs e)
{
string[] args;
TextItemsFound = 0;
args = (string[])e.Argument;
lock (CurrentDownloads)
CurrentDownloads.Clear();
// FIXME:
//Client.Inventory.RequestFolderContents(Client.Inventory.Store.RootFolder.UUID, Client.Self.AgentID,
// true, true, false, InventorySortOrder.ByName);
DirectoryInfo di = new DirectoryInfo(args[1]);
// recurse on the root folder into the entire inventory
BackupFolder(Client.Inventory.Store.RootNode, di.FullName);
}
/// <summary>
/// BackupFolder - recurse through the inventory nodes sending scripts and notecards to the transfer queue
/// </summary>
/// <param name="folder">The current leaf in the inventory tree</param>
/// <param name="sPathSoFar">path so far, in the form @"c:\here" -- this needs to be "clean" for the current filesystem</param>
private void BackupFolder(InventoryNode folder, string sPathSoFar)
{
StringBuilder sbRequests = new StringBuilder();
// FIXME:
//Client.Inventory.RequestFolderContents(folder.Data.UUID, Client.Self.AgentID, true, true, false,
// InventorySortOrder.ByName);
// first scan this folder for text
foreach (InventoryNode iNode in folder.Nodes.Values)
{
if (BackupWorker.CancellationPending)
return;
if (iNode.Data is OpenMetaverse.InventoryItem)
{
InventoryItem ii = iNode.Data as InventoryItem;
string sExtension;
string sPath;
switch (ii.AssetType)
{
case AssetType.Animation:
sExtension = ".animatn";
break;
case AssetType.Bodypart:
sExtension = ".bodypart";
break;
case AssetType.CallingCard:
continue; // They really don't exist. Are not backable.
case AssetType.Clothing:
sExtension = ".clothing";
break;
case AssetType.Folder:
continue;
case AssetType.Gesture:
sExtension = ".gesture";
break;
case AssetType.ImageJPEG:
sExtension = ".jpg";
break;
case AssetType.ImageTGA:
sExtension = ".tga";
break;
case AssetType.Landmark:
sExtension = ".landmark";
break;
case AssetType.LostAndFoundFolder:
continue;
case AssetType.LSLBytecode:
sExtension = ".lso";
break;
case AssetType.LSLText:
if ((ii.Permissions.OwnerMask & PermissionMask.Copy) == PermissionMask.None || (ii.Permissions.OwnerMask & PermissionMask.Modify) == PermissionMask.None)
{
continue; // Nocopy scripts are not readable (SecondLife Jira VWR-5238). Nomod scripts will never be.
}
else
{
sExtension = ".lsl";
break;
}
case AssetType.Notecard:
if ((ii.Permissions.OwnerMask & PermissionMask.Copy) == PermissionMask.None)
{
continue; // Nocopy notecards are not readable (SecondLife Jira VWR-5238)
}
else
{
sExtension = ".notecard";
break;
}
case AssetType.Object:
/*sExtension=".object";
break;*/
continue; // They cannot be copied from the inventory, they must be rezzed
case AssetType.RootFolder:
continue;
case AssetType.Simstate:
sExtension = ".simstate";
break;
case AssetType.SnapshotFolder:
continue;
case AssetType.Sound:
sExtension = ".ogg";
break;
case AssetType.SoundWAV:
sExtension = ".wav";
break;
case AssetType.Texture:
sExtension = ".jp2";
break;
case AssetType.TextureTGA:
sExtension = ".tga";
break;
case AssetType.TrashFolder:
continue;
case AssetType.Unknown:
default:
sExtension = ".unk";
break;
}
// make the output file
sPath = sPathSoFar + @"\" + MakeValid(ii.Name.Trim()) + sExtension;
// create the new qdi
QueuedDownloadInfo qdi = new QueuedDownloadInfo(sPath, ii.AssetUUID, iNode.Data.UUID, UUID.Zero,
Client.Self.AgentID, ii.AssetType);
// add it to the queue
lock (PendingDownloads)
{
TextItemsFound++;
PendingDownloads.Enqueue(qdi);
}
}
}
// now run any subfolders
foreach (InventoryNode i in folder.Nodes.Values)
{
if (BackupWorker.CancellationPending)
return;
else if (i.Data is OpenMetaverse.InventoryFolder)
BackupFolder(i, sPathSoFar + @"\" + MakeValid(i.Data.Name.Trim()));
}
}
private string MakeValid(string path)
{
string FinalName;
//FinalName = path.Replace(" ", "_"); // This is not needed for exporting the inventory
FinalName = path.Replace(":", ";");
FinalName = FinalName.Replace("*", "+");
FinalName = FinalName.Replace("|", "I");
FinalName = FinalName.Replace("\\", "[");
FinalName = FinalName.Replace("/", "]");
FinalName = FinalName.Replace("?", "¿");
FinalName = FinalName.Replace(">", "}");
FinalName = FinalName.Replace("<", "{");
FinalName = FinalName.Replace("\"", "'");
FinalName = FinalName.Replace("\n", " ");
return FinalName;
}
private void Assets_OnAssetReceived(AssetDownload asset, Asset blah)
{
lock (CurrentDownloads)
{
// see if we have this in our transfer list
QueuedDownloadInfo r = CurrentDownloads.Find(delegate(QueuedDownloadInfo q)
{
return q.AssetID == asset.AssetID;
});
if (r != null && r.AssetID == asset.AssetID)
{
if (asset.Success)
{
// create the directory to put this in
Directory.CreateDirectory(Path.GetDirectoryName(r.FileName));
// write out the file
File.WriteAllBytes(r.FileName, asset.AssetData);
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.Wrote"), Name, r.FileName);
TextItemsTransferred++;
}
else
{
TextItemErrors++;
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.Failed"), Name, r.FileName,
r.AssetID.ToString(), asset.Status.ToString());
}
// remove the entry
CurrentDownloads.Remove(r);
}
}
}
/// <summary>
/// returns blank or "not" if false
/// </summary>
/// <param name="b"></param>
/// <returns></returns>
private static string BoolToNot(bool b)
{
return b ? String.Empty : bot.Localization.clResourceManager.getText("Commands.Backup.Not");
}
private void Assets_OnImageReceived(TextureRequestState state, AssetTexture asset)
{
lock (CurrentDownloads)
{
// see if we have this in our transfer list
QueuedDownloadInfo r = CurrentDownloads.Find(delegate(QueuedDownloadInfo q)
{
return q.AssetID == asset.AssetID;
});
if (r != null && r.AssetID == asset.AssetID)
{
if (asset != null/* && asset.Decode()*/)
{
// create the directory to put this in
Directory.CreateDirectory(Path.GetDirectoryName(r.FileName));
// write out the file
File.WriteAllBytes(r.FileName, asset.AssetData);
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.Wrote"), Name, r.FileName);
// This, even being a desiderable feature, timeouts the bot and it gets ejected from SL.
/*File.WriteAllBytes(r.FileName.Substring(0, r.FileName.Length - 4) + ".tga", asset.Image.ExportTGA());
bot.Console.WriteLine("Wrote " + r.FileName.Substring(0, r.FileName.Length - 4) + ".tga");
Logger.DebugLog(Name + " Wrote: " + r.FileName.Substring(0, r.FileName.Length - 4) + ".tga", Client);*/
TextItemsTransferred++;
}
else
{
TextItemErrors++;
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.Failed"), Name, r.FileName,
r.AssetID.ToString(), bot.Localization.clResourceManager.getText("Commands.Backup.Unknown"));
}
// remove the entry
CurrentDownloads.Remove(r);
}
}
}
}
}

View File

@@ -0,0 +1,370 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : BackupTextCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using OpenMetaverse;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Text;
using System.Threading;
using OpenMetaverse.Assets;
public class BackupTextCommand : Command
{
private BackgroundWorker BackupWorker;
private List<QueuedDownloadInfo> CurrentDownloads = new List<QueuedDownloadInfo>(10);
private const int MAX_TRANSFERS = 10;
private Queue<QueuedDownloadInfo> PendingDownloads = new Queue<QueuedDownloadInfo>();
private BackgroundWorker QueueWorker;
private int TextItemErrors;
private int TextItemsFound;
private int TextItemsTransferred;
#region Properties
/// <summary>
/// true if either of the background threads is running
/// </summary>
private bool BackgroundBackupRunning
{
get { return InventoryWalkerRunning || QueueRunnerRunning; }
}
/// <summary>
/// true if the thread walking inventory is running
/// </summary>
private bool InventoryWalkerRunning
{
get { return BackupWorker != null; }
}
/// <summary>
/// true if the thread feeding the queue to the server is running
/// </summary>
private bool QueueRunnerRunning
{
get { return QueueWorker != null; }
}
/// <summary>
/// returns a string summarizing activity
/// </summary>
/// <returns></returns>
private string BackgroundBackupStatus
{
get
{
StringBuilder sbResult = new StringBuilder();
sbResult.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Backup.Running"), Name, BoolToNot(BackgroundBackupRunning));
if (TextItemErrors != 0 || TextItemsFound != 0 || TextItemsTransferred != 0)
{
sbResult.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Backup.Walker"),
Name, BoolToNot(InventoryWalkerRunning), TextItemsFound);
sbResult.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Backup.Transfer"),
Name, BoolToNot(QueueRunnerRunning), TextItemsTransferred, TextItemErrors);
sbResult.AppendFormat(bot.Localization.clResourceManager.getText("Commands.Backup.Queue"),
Name, PendingDownloads.Count, CurrentDownloads.Count);
}
return sbResult.ToString();
}
}
#endregion Properties
public BackupTextCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "backuptext";
base.Description = bot.Localization.clResourceManager.getText("Commands.BackupText.Description") + " " + String.Format(bot.Localization.clResourceManager.getText("Commands.Backup.Usage"), Name);
}
public override string Execute(string[] args, UUID fromAgentID, bool fromSL)
{
Program.NBStats.AddStatData(String.Format("{0}: {1} backing up all text.", DateTime.Now.ToString(), Client));
StringBuilder sbResult = new StringBuilder();
if (args.Length == 1 && args[0] == "status")
{
return BackgroundBackupStatus;
}
else if (args.Length == 1 && args[0] == "abort")
{
if (!BackgroundBackupRunning)
return BackgroundBackupStatus;
BackupWorker.CancelAsync();
QueueWorker.CancelAsync();
Thread.Sleep(500);
// check status
return BackgroundBackupStatus;
}
else if (args.Length != 2)
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.Backup.Usage"), Name);
}
else if (BackgroundBackupRunning)
{
return BackgroundBackupStatus;
}
QueueWorker = new BackgroundWorker();
QueueWorker.WorkerSupportsCancellation = true;
QueueWorker.DoWork += new DoWorkEventHandler(bwQueueRunner_DoWork);
QueueWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwQueueRunner_RunWorkerCompleted);
QueueWorker.RunWorkerAsync();
BackupWorker = new BackgroundWorker();
BackupWorker.WorkerSupportsCancellation = true;
BackupWorker.DoWork += new DoWorkEventHandler(bwBackup_DoWork);
BackupWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwBackup_RunWorkerCompleted);
BackupWorker.RunWorkerAsync(args);
return bot.Localization.clResourceManager.getText("Commands.Backup.Started");
}
void bwQueueRunner_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
QueueWorker = null;
bot.Console.WriteLine(BackgroundBackupStatus);
}
void bwQueueRunner_DoWork(object sender, DoWorkEventArgs e)
{
TextItemErrors = TextItemsTransferred = 0;
while (QueueWorker.CancellationPending == false)
{
// have any timed out?
if (CurrentDownloads.Count > 0)
{
foreach (QueuedDownloadInfo qdi in CurrentDownloads)
{
if ((qdi.WhenRequested + TimeSpan.FromSeconds(60)) < DateTime.Now)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.Timeout"), Name, qdi.AssetID.ToString());
// submit request again
Client.Assets.RequestInventoryAsset(
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true, Assets_OnAssetReceived);
qdi.WhenRequested = DateTime.Now;
qdi.IsRequested = true;
}
}
}
if (PendingDownloads.Count != 0)
{
// room in the server queue?
if (CurrentDownloads.Count < MAX_TRANSFERS)
{
// yes
QueuedDownloadInfo qdi = PendingDownloads.Dequeue();
qdi.WhenRequested = DateTime.Now;
qdi.IsRequested = true;
Client.Assets.RequestInventoryAsset(
qdi.AssetID, qdi.ItemID, qdi.TaskID, qdi.OwnerID, qdi.Type, true, Assets_OnAssetReceived);
lock (CurrentDownloads)
CurrentDownloads.Add(qdi);
}
}
if (CurrentDownloads.Count == 0 && PendingDownloads.Count == 0 && BackupWorker == null)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.AllDone"), Name);
return;
}
Thread.Sleep(100);
}
}
void bwBackup_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.WalkingDone"), Name);
BackupWorker = null;
}
private void bwBackup_DoWork(object sender, DoWorkEventArgs e)
{
string[] args;
TextItemsFound = 0;
args = (string[])e.Argument;
lock (CurrentDownloads)
CurrentDownloads.Clear();
// FIXME:
//Client.Inventory.RequestFolderContents(Client.Inventory.Store.RootFolder.UUID, Client.Self.AgentID,
// true, true, false, InventorySortOrder.ByName);
DirectoryInfo di = new DirectoryInfo(args[1]);
// recurse on the root folder into the entire inventory
BackupFolder(Client.Inventory.Store.RootNode, di.FullName);
}
/// <summary>
/// BackupFolder - recurse through the inventory nodes sending scripts and notecards to the transfer queue
/// </summary>
/// <param name="folder">The current leaf in the inventory tree</param>
/// <param name="sPathSoFar">path so far, in the form @"c:\here" -- this needs to be "clean" for the current filesystem</param>
private void BackupFolder(InventoryNode folder, string sPathSoFar)
{
StringBuilder sbRequests = new StringBuilder();
// FIXME:
//Client.Inventory.RequestFolderContents(folder.Data.UUID, Client.Self.AgentID, true, true, false,
// InventorySortOrder.ByName);
// first scan this folder for text
foreach (InventoryNode iNode in folder.Nodes.Values)
{
if (BackupWorker.CancellationPending)
return;
if (iNode.Data is OpenMetaverse.InventoryItem)
{
InventoryItem ii = iNode.Data as InventoryItem;
if (ii.AssetType == AssetType.LSLText || ii.AssetType == AssetType.Notecard)
{
// check permissions on scripts
if (ii.AssetType == AssetType.LSLText)
{
if ((ii.Permissions.OwnerMask & PermissionMask.Modify) == PermissionMask.None)
{
// skip this one
continue;
}
}
string sExtension = (ii.AssetType == AssetType.LSLText) ? ".lsl" : ".txt";
// make the output file
string sPath = sPathSoFar + @"\" + MakeValid(ii.Name.Trim()) + sExtension;
// create the new qdi
QueuedDownloadInfo qdi = new QueuedDownloadInfo(sPath, ii.AssetUUID, iNode.Data.UUID, UUID.Zero,
Client.Self.AgentID, ii.AssetType);
// add it to the queue
lock (PendingDownloads)
{
TextItemsFound++;
PendingDownloads.Enqueue(qdi);
}
}
}
}
// now run any subfolders
foreach (InventoryNode i in folder.Nodes.Values)
{
if (BackupWorker.CancellationPending)
return;
else if (i.Data is OpenMetaverse.InventoryFolder)
BackupFolder(i, sPathSoFar + @"\" + MakeValid(i.Data.Name.Trim()));
}
}
private string MakeValid(string path)
{
string FinalName;
FinalName = path.Replace(" ", "_");
FinalName = FinalName.Replace(":", ";");
FinalName = FinalName.Replace("*", "+");
FinalName = FinalName.Replace("|", "I");
FinalName = FinalName.Replace("\\", "[");
FinalName = FinalName.Replace("/", "]");
FinalName = FinalName.Replace("?", "¿");
FinalName = FinalName.Replace(">", "}");
FinalName = FinalName.Replace("<", "{");
FinalName = FinalName.Replace("\"", "'");
FinalName = FinalName.Replace("\n", " ");
return FinalName;
}
private void Assets_OnAssetReceived(AssetDownload asset, Asset blah)
{
lock (CurrentDownloads)
{
// see if we have this in our transfer list
QueuedDownloadInfo r = CurrentDownloads.Find(delegate(QueuedDownloadInfo q)
{
return q.AssetID == asset.AssetID;
});
if (r != null && r.AssetID == asset.AssetID)
{
if (asset.Success)
{
// create the directory to put this in
Directory.CreateDirectory(Path.GetDirectoryName(r.FileName));
// write out the file
File.WriteAllBytes(r.FileName, asset.AssetData);
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.Wrote"), Name, r.FileName);
TextItemsTransferred++;
}
else
{
TextItemErrors++;
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.Backup.Failed"), Name, r.FileName,
r.AssetID.ToString(), asset.Status.ToString());
}
// remove the entry
CurrentDownloads.Remove(r);
}
}
}
/// <summary>
/// returns blank or "not" if false
/// </summary>
/// <param name="b"></param>
/// <returns></returns>
private static string BoolToNot(bool b)
{
return b ? String.Empty : bot.Localization.clResourceManager.getText("Commands.Backup.Not");
}
}
}

View File

@@ -0,0 +1,122 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : ChangeDirectoryCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.Collections.Generic;
using System.Text;
using OpenMetaverse;
public class ChangeDirectoryCommand : Command
{
private InventoryManager Manager;
private OpenMetaverse.Inventory Inventory;
public ChangeDirectoryCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "cd";
base.Description = bot.Localization.clResourceManager.getText("Commands.ChangeDirectory.Description") + " " + bot.Localization.clResourceManager.getText("Commands.ChangeDirectory.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
Manager = Client.Inventory;
Inventory = Client.Inventory.Store;
if (args.Length > 1)
return bot.Localization.clResourceManager.getText("Commands.ChangeDirectory.Usage");
string pathStr = "";
string[] path = null;
if (args.Length == 0)
{
path = new string[] { "" };
// cd without any arguments doesn't do anything.
}
else if (args.Length == 1)
{
pathStr = args[0];
path = pathStr.Split(new char[] { '/' });
// Use '/' as a path seperator.
}
InventoryFolder currentFolder = Client.CurrentDirectory;
if (pathStr.StartsWith("/"))
currentFolder = Inventory.RootFolder;
if (currentFolder == null) // We need this to be set to something.
//return "Error: Sesi<73>n no iniciada.";
currentFolder = Inventory.RootFolder;
// Traverse the path, looking for the
for (int i = 0; i < path.Length; ++i)
{
string nextName = path[i];
if (string.IsNullOrEmpty(nextName) || nextName == ".")
continue; // Ignore '.' and blanks, stay in the current directory.
if (nextName == ".." && currentFolder != Inventory.RootFolder)
{
// If we encounter .., move to the parent folder.
currentFolder = Inventory[currentFolder.ParentUUID] as InventoryFolder;
}
else
{
List<InventoryBase> currentContents = Inventory.GetContents(currentFolder);
// Try and find an InventoryBase with the corresponding name.
bool found = false;
foreach (InventoryBase item in currentContents)
{
// Allow lookup by UUID as well as name:
if (item.Name == nextName || item.UUID.ToString() == nextName)
{
found = true;
if (item is InventoryFolder)
{
currentFolder = item as InventoryFolder;
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.ChangeDirectory.NotFolder"), item.Name);
}
}
}
if (!found)
return String.Format(bot.Localization.clResourceManager.getText("Commands.ChangeDirectory.NotFound"), nextName, currentFolder.Name);
}
}
Client.CurrentDirectory = currentFolder;
return String.Format(bot.Localization.clResourceManager.getText("Commands.ChangeDirectory.CurrentFolder"), currentFolder.Name);
}
}
}

View File

@@ -0,0 +1,504 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : CreateClothingCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
public class CreateClothingCommand : Command
{
public CreateClothingCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "createclothing";
base.Description = bot.Localization.clResourceManager.getText("Commands.CreateClothing.Description") + " " + bot.Localization.clResourceManager.getText("Commands.CreateClothing.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
string LongUsage = bot.Localization.clResourceManager.getText("Commands.CreateClothing.UsageLine1") + System.Environment.NewLine +
bot.Localization.clResourceManager.getText("Commands.CreateClothing.UsageLine2");
string finalmessage = "";
string NL = "\n";
WearableType wtype;
UUID uuid1, uuid2;
uuid2 = UUID.Zero;
if (args.Length == 0)
return Description;
if (args.Length == 1)
if (args[0].ToLower() == "help")
return LongUsage;
else
return Description;
if (args.Length != 3 && args.Length != 4)
return Description;
switch (args[1].ToLower())
{
case "gloves":
wtype = WearableType.Gloves;
break;
case "jacket":
wtype = WearableType.Jacket;
if (args.Length != 4)
return bot.Localization.clResourceManager.getText("Commands.CreateClothing.Jacket");
break;
case "pants":
wtype = WearableType.Pants;
break;
case "shirt":
wtype = WearableType.Shirt;
break;
case "shoes":
wtype = WearableType.Shoes;
break;
case "skirt":
wtype = WearableType.Skirt;
break;
case "socks":
wtype = WearableType.Socks;
break;
case "underpants":
wtype = WearableType.Underpants;
break;
case "undershirt":
wtype = WearableType.Undershirt;
break;
default:
return bot.Localization.clResourceManager.getText("Commands.CreateClothing.Incorrect");
}
if (!UUID.TryParse(args[2], out uuid1))
return bot.Localization.clResourceManager.getText("Commands.CreateClothing.ExpectedID1");
if (args.Length == 4)
if (!UUID.TryParse(args[3], out uuid2))
return bot.Localization.clResourceManager.getText("Commands.CreateClothing.ExpectedID2");
if (args[1].ToLower() == "jacket")
Program.NBStats.AddStatData(String.Format("{0}: {1} creating clothing of type {2} named {3} with uuid {4} {5}.", DateTime.Now.ToString(), Client, args[1], args[0], args[2], args[3]));
else
Program.NBStats.AddStatData(String.Format("{0}: {1} creating clothing of type {2} named {3} with uuid {4}.", DateTime.Now.ToString(), Client, args[1], args[0], args[2]));
#region Part common to all wearable types
StringBuilder sbcloth = new StringBuilder("LLWearable version 22\n");
sbcloth.Append(args[0]);
sbcloth.Append(NL);
sbcloth.Append(NL);
sbcloth.Append("\tpermissions 0\n\t{\n");
sbcloth.Append("\t\tbase_mask\t");
sbcloth.Append("7fffffff");
sbcloth.Append(NL);
sbcloth.Append("\t\towner_mask\t");
sbcloth.Append("7fffffff");
sbcloth.Append(NL);
sbcloth.Append("\t\tgroup_mask\t");
sbcloth.Append("00000000");
sbcloth.Append(NL);
sbcloth.Append("\t\teveryone_mask\t");
sbcloth.Append("00000000");
sbcloth.Append(NL);
sbcloth.Append("\t\tnext_owner_mask\t");
sbcloth.Append("7fffffff");
sbcloth.Append(NL);
sbcloth.Append("\t\tcreator_id\t");
sbcloth.Append(Client.Self.AgentID.ToString());
sbcloth.Append(NL);
sbcloth.Append("\t\towner_id\t");
sbcloth.Append(Client.Self.AgentID.ToString());
sbcloth.Append(NL);
sbcloth.Append("\t\tlast_owner_id\t");
sbcloth.Append(Client.Self.AgentID.ToString());
sbcloth.Append(NL);
sbcloth.Append("\t\tgroup_id\t");
sbcloth.Append(UUID.Zero.ToString());
sbcloth.Append(NL);
sbcloth.Append("\t}\n");
sbcloth.Append("\tsale_info\t0\n");
sbcloth.Append("\t{\n");
sbcloth.Append("\t\tsale_type\t");
sbcloth.Append("not");
sbcloth.Append(NL);
sbcloth.Append("\t\tsale_price\t");
sbcloth.Append("0");
sbcloth.Append(NL);
sbcloth.Append("\t}\n");
#endregion #region Part common to all wearable types
sbcloth.Append("type ");
sbcloth.Append((int)wtype);
sbcloth.Append(NL);
switch (wtype)
{
case WearableType.Gloves:
sbcloth.Append("parameters ");
sbcloth.Append(5);
sbcloth.Append(NL);
sbcloth.Append("93 ");
sbcloth.Append(".8");
sbcloth.Append(NL);
sbcloth.Append("827 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("829 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("830 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("844 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("15 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
break;
case WearableType.Jacket:
sbcloth.Append("parameters ");
sbcloth.Append(9);
sbcloth.Append(NL);
sbcloth.Append("606 ");
sbcloth.Append(".8");
sbcloth.Append(NL);
sbcloth.Append("607 ");
sbcloth.Append(".8");
sbcloth.Append(NL);
sbcloth.Append("608 ");
sbcloth.Append(".8");
sbcloth.Append(NL);
sbcloth.Append("609 ");
sbcloth.Append(".2");
sbcloth.Append(NL);
sbcloth.Append("780 ");
sbcloth.Append(".8");
sbcloth.Append(NL);
sbcloth.Append("834 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("835 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("836 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("877 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(2);
sbcloth.Append(NL);
sbcloth.Append("13 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
sbcloth.Append("14 ");
sbcloth.Append(uuid2.ToString());
sbcloth.Append(NL);
break;
case WearableType.Pants:
sbcloth.Append("parameters ");
sbcloth.Append(9);
sbcloth.Append(NL);
sbcloth.Append("625 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("638 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("806 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("807 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("808 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("814 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("815 ");
sbcloth.Append(".8");
sbcloth.Append(NL);
sbcloth.Append("816 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("869 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("2 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
break;
case WearableType.Shirt:
sbcloth.Append("parameters ");
sbcloth.Append(10);
sbcloth.Append(NL);
sbcloth.Append("781 ");
sbcloth.Append(".78");
sbcloth.Append(NL);
sbcloth.Append("800 ");
sbcloth.Append(".89");
sbcloth.Append(NL);
sbcloth.Append("801 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("802 ");
sbcloth.Append(".78");
sbcloth.Append(NL);
sbcloth.Append("803 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("804 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("805 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("828 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("840 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("868 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("1 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
break;
case WearableType.Shoes:
sbcloth.Append("parameters ");
sbcloth.Append(10);
sbcloth.Append(NL);
sbcloth.Append("198 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("503 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("508 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("513 ");
sbcloth.Append(".5");
sbcloth.Append(NL);
sbcloth.Append("514 ");
sbcloth.Append(".5");
sbcloth.Append(NL);
sbcloth.Append("616 ");
sbcloth.Append(".1");
sbcloth.Append(NL);
sbcloth.Append("654 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("812 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("813 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("817 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("7 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
break;
case WearableType.Skirt:
sbcloth.Append("parameters ");
sbcloth.Append(10);
sbcloth.Append(NL);
sbcloth.Append("848 ");
sbcloth.Append(".2");
sbcloth.Append(NL);
sbcloth.Append("858 ");
sbcloth.Append(".4");
sbcloth.Append(NL);
sbcloth.Append("859 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("860 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("861 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("862 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("863 ");
sbcloth.Append(".33");
sbcloth.Append(NL);
sbcloth.Append("921 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("922 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("923 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("18 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
break;
case WearableType.Socks:
sbcloth.Append("parameters ");
sbcloth.Append(4);
sbcloth.Append(NL);
sbcloth.Append("617 ");
sbcloth.Append(".35");
sbcloth.Append(NL);
sbcloth.Append("818 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("819 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("820 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("12 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
break;
case WearableType.Underpants:
sbcloth.Append("parameters ");
sbcloth.Append(5);
sbcloth.Append(NL);
sbcloth.Append("619 ");
sbcloth.Append(".3");
sbcloth.Append(NL);
sbcloth.Append("624 ");
sbcloth.Append(".8");
sbcloth.Append(NL);
sbcloth.Append("824 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("825 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("826 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("17 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
break;
case WearableType.Undershirt:
sbcloth.Append("parameters ");
sbcloth.Append(7);
sbcloth.Append(NL);
sbcloth.Append("603 ");
sbcloth.Append(".4");
sbcloth.Append(NL);
sbcloth.Append("604 ");
sbcloth.Append(".85");
sbcloth.Append(NL);
sbcloth.Append("605 ");
sbcloth.Append(".84");
sbcloth.Append(NL);
sbcloth.Append("779 ");
sbcloth.Append(".84");
sbcloth.Append(NL);
sbcloth.Append("821 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("822 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("823 ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("16 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
break;
}
AssetClothing clothing = new AssetClothing(sbcloth.ToString());
clothing.Decode();
Client.Inventory.RequestCreateItemFromAsset(clothing.AssetData, args[0], String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.CreatedBy"), args[0], DateTime.Now), AssetType.Clothing,
InventoryType.Wearable, Client.Inventory.FindFolderForType(AssetType.Clothing),
delegate(bool success, string status, UUID itemID, UUID assetID)
{
if (success)
{
finalmessage = String.Format(bot.Localization.clResourceManager.getText("Commands.CreateClothing.Created"), assetID);
Client.Inventory.GiveItem(itemID, args[0], AssetType.Clothing, Client.MasterKey, false);
}
else
{
finalmessage = String.Format(bot.Localization.clResourceManager.getText("Commands.CreateClothing.Failed"), status);
}
}
);
return finalmessage;
}
}
}

View File

@@ -0,0 +1,156 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : CreateEyesCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
public class CreateEyesCommand : Command
{
public CreateEyesCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "createeyes";
base.Description = bot.Localization.clResourceManager.getText("Commands.CreateEyes.Description") + " " + bot.Localization.clResourceManager.getText("Commands.CreateEyes.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
string finalmessage = "";
string NL = "\n";
UUID uuid1;
uuid1 = UUID.Zero;
if (args.Length != 2)
return Description;
if (!UUID.TryParse(args[1], out uuid1))
return bot.Localization.clResourceManager.getText("Commands.CreateEyes.ExpectedID");
Program.NBStats.AddStatData(String.Format("{0}: {1} creating eyes named {2} with uuid {3}.", DateTime.Now.ToString(), Client, args[0], args[1]));
#region Part common to all wearable types
StringBuilder sbcloth = new StringBuilder("LLWearable version 22\n");
sbcloth.Append(args[0]);
sbcloth.Append(NL);
sbcloth.Append(NL);
sbcloth.Append("\tpermissions 0\n\t{\n");
sbcloth.Append("\t\tbase_mask\t");
sbcloth.Append("7fffffff");
sbcloth.Append(NL);
sbcloth.Append("\t\towner_mask\t");
sbcloth.Append("7fffffff");
sbcloth.Append(NL);
sbcloth.Append("\t\tgroup_mask\t");
sbcloth.Append("00000000");
sbcloth.Append(NL);
sbcloth.Append("\t\teveryone_mask\t");
sbcloth.Append("00000000");
sbcloth.Append(NL);
sbcloth.Append("\t\tnext_owner_mask\t");
sbcloth.Append("7fffffff");
sbcloth.Append(NL);
sbcloth.Append("\t\tcreator_id\t");
sbcloth.Append(Client.Self.AgentID.ToString());
sbcloth.Append(NL);
sbcloth.Append("\t\towner_id\t");
sbcloth.Append(Client.Self.AgentID.ToString());
sbcloth.Append(NL);
sbcloth.Append("\t\tlast_owner_id\t");
sbcloth.Append(Client.Self.AgentID.ToString());
sbcloth.Append(NL);
sbcloth.Append("\t\tgroup_id\t");
sbcloth.Append(UUID.Zero.ToString());
sbcloth.Append(NL);
sbcloth.Append("\t}\n");
sbcloth.Append("\tsale_info\t0\n");
sbcloth.Append("\t{\n");
sbcloth.Append("\t\tsale_type\t");
sbcloth.Append("not");
sbcloth.Append(NL);
sbcloth.Append("\t\tsale_price\t");
sbcloth.Append("0");
sbcloth.Append(NL);
sbcloth.Append("\t}\n");
#endregion #region Part common to all wearable types
sbcloth.Append("type ");
sbcloth.Append((int)WearableType.Eyes);
sbcloth.Append(NL);
sbcloth.Append("parameters ");
sbcloth.Append(2);
sbcloth.Append(NL);
sbcloth.Append("98 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("99 ");
sbcloth.Append(0);
sbcloth.Append(NL);
sbcloth.Append("textures ");
sbcloth.Append(1);
sbcloth.Append(NL);
sbcloth.Append("3 ");
sbcloth.Append(uuid1.ToString());
sbcloth.Append(NL);
AssetBodypart bodypart = new AssetBodypart(sbcloth.ToString());
bodypart.Decode();
Client.Inventory.RequestCreateItemFromAsset(bodypart.AssetData, args[0], String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.CreatedBy"), args[0], DateTime.Now), AssetType.Bodypart,
InventoryType.Wearable, Client.Inventory.FindFolderForType(AssetType.Bodypart),
delegate(bool success, string status, UUID itemID, UUID assetID)
{
if (success)
{
finalmessage = String.Format(bot.Localization.clResourceManager.getText("Commands.CreateEyes.Created"), assetID);
Client.Inventory.GiveItem(itemID, args[0], AssetType.Bodypart, Client.MasterKey, false);
}
else
{
finalmessage = String.Format(bot.Localization.clResourceManager.getText("Commands.CreateEyes.Failed"), status);
}
}
);
return finalmessage;
}
}
}

View File

@@ -0,0 +1,81 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : CreateLandMarkCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
// Does not work, HTTP error 400.
namespace bot.Commands
{
using bot;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
public class CreateLandMarkCommand : Command
{
public CreateLandMarkCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "createlm";
base.Description = bot.Localization.clResourceManager.getText("Commands.CreateLandMark.Description");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
string finalmessage = "";
AssetLandmark landmark = new AssetLandmark(this.Client.Network.CurrentSim.RegionID, this.Client.Self.SimPosition);
landmark.Encode();
landmark.Decode();
Client.Inventory.RequestCreateItemFromAsset(landmark.AssetData, this.Client.Network.CurrentSim.Name, String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.CreatedBy"), this.Client.Network.CurrentSim.Name, DateTime.Now), AssetType.Landmark,
InventoryType.Landmark, Client.Inventory.FindFolderForType(AssetType.Landmark),
delegate(bool success, string status, UUID itemID, UUID assetID)
{
if (success)
{
finalmessage = String.Format(bot.Localization.clResourceManager.getText("Commands.CreateLandMark.Created"), assetID);
Client.Inventory.GiveItem(itemID, this.Client.Network.CurrentSim.Name, AssetType.Clothing, Client.MasterKey, false);
}
else
{
finalmessage = String.Format(bot.Localization.clResourceManager.getText("Commands.CreateLandMark.Failed"), status);
}
}
);
return finalmessage;
}
}
}

View File

@@ -0,0 +1,233 @@
/***************************************************************************
The Disc Image Chef
----------------------------------------------------------------------------
Filename : CreateNotecardCommand.cs
Version : 1.0.326
Author(s) : Natalia Portillo
Component : NatiBot
Revision : r326
Last change by : Natalia Portillo
Date : 2010/01/01
--[ License ] --------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Copyright (C) 2008-2014 Claunia.com
****************************************************************************/
namespace bot.Commands
{
using bot;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using OpenMetaverse;
using OpenMetaverse.Assets;
public class CreateNotecardCommand : Command
{
const int NOTECARD_CREATE_TIMEOUT = 2500 * 10;
const int NOTECARD_FETCH_TIMEOUT = 1500 * 10;
const int INVENTORY_FETCH_TIMEOUT = 1500 * 10;
public CreateNotecardCommand(SecondLifeBot SecondLifeBot)
{
base.Name = "createnotecard";
base.Description = bot.Localization.clResourceManager.getText("Commands.CreateNotecard.Description") + " " + bot.Localization.clResourceManager.getText("Commands.CreateNotecard.Usage");
}
public override string Execute(string[] args, UUID fromAgentID, bool something_else)
{
UUID embedItemID = UUID.Zero, notecardItemID = UUID.Zero, notecardAssetID = UUID.Zero;
string filename, fileData;
bool success = false, finalUploadSuccess = false;
string message = String.Empty;
AutoResetEvent notecardEvent = new AutoResetEvent(false);
if (args.Length == 1)
{
filename = args[0];
}
else if (args.Length == 2)
{
filename = args[0];
UUID.TryParse(args[1], out embedItemID);
}
else
{
return bot.Localization.clResourceManager.getText("Commands.CreateNotecard.Usage");
}
if (!File.Exists(filename))
return String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.NotFound"), filename);
try
{
fileData = File.ReadAllText(filename);
}
catch (Exception ex)
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.OpenFailed"), filename, ex.Message);
}
#region Notecard asset data
AssetNotecard notecard = new AssetNotecard();
notecard.BodyText = fileData;
// Item embedding
if (embedItemID != UUID.Zero)
{
// Try to fetch the inventory item
InventoryItem item = FetchItem(embedItemID);
if (item != null)
{
notecard.EmbeddedItems = new List<InventoryItem> { item };
notecard.BodyText += (char)0xdbc0 + (char)0xdc00;
}
else
{
return String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.FetchFailed"), embedItemID);
}
}
notecard.Encode();
#endregion Notecard asset data
Client.Inventory.RequestCreateItem(Client.Inventory.FindFolderForType(AssetType.Notecard),
filename, String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.CreatedBy"), filename, DateTime.Now), AssetType.Notecard,
UUID.Random(), InventoryType.Notecard, PermissionMask.All,
delegate(bool createSuccess, InventoryItem item)
{
if (createSuccess)
{
#region Upload an empty notecard asset first
AutoResetEvent emptyNoteEvent = new AutoResetEvent(false);
AssetNotecard empty = new AssetNotecard();
empty.BodyText = "\n";
empty.Encode();
Client.Inventory.RequestUploadNotecardAsset(empty.AssetData, item.UUID,
delegate(bool uploadSuccess, string status, UUID itemID, UUID assetID)
{
notecardItemID = itemID;
notecardAssetID = assetID;
success = uploadSuccess;
message = status ?? bot.Localization.clResourceManager.getText("Commands.CreateNotecard.UnknownError");
emptyNoteEvent.Set();
});
emptyNoteEvent.WaitOne(NOTECARD_CREATE_TIMEOUT, false);
#endregion Upload an empty notecard asset first
if (success)
{
// Upload the actual notecard asset
Client.Inventory.RequestUploadNotecardAsset(notecard.AssetData, item.UUID,
delegate(bool uploadSuccess, string status, UUID itemID, UUID assetID)
{
notecardItemID = itemID;
notecardAssetID = assetID;
finalUploadSuccess = uploadSuccess;
message = status ?? bot.Localization.clResourceManager.getText("Commands.CreateNotecard.UnknownError");
notecardEvent.Set();
});
}
else
{
notecardEvent.Set();
}
}
else
{
message = bot.Localization.clResourceManager.getText("Commands.CreateNotecard.CreateFail");
notecardEvent.Set();
}
}
);
notecardEvent.WaitOne(NOTECARD_CREATE_TIMEOUT, false);
if (finalUploadSuccess)
{
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.Success"), notecardItemID, notecardAssetID);
Client.Inventory.GiveItem(notecardItemID, filename, AssetType.Notecard, Client.MasterKey, false);
bot.Console.WriteLine(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.Sending"));
return DownloadNotecard(notecardItemID, notecardAssetID);
}
else
return String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.CreateFailDetails"), message);
}
private InventoryItem FetchItem(UUID itemID)
{
InventoryItem fetchItem = null;
AutoResetEvent fetchItemEvent = new AutoResetEvent(false);
EventHandler<ItemReceivedEventArgs> itemReceivedCallback =
delegate(object sender, ItemReceivedEventArgs e)
{
if (e.Item.UUID == itemID)
{
fetchItem = e.Item;
fetchItemEvent.Set();
}
};
Client.Inventory.ItemReceived += itemReceivedCallback;
Client.Inventory.RequestFetchInventory(itemID, Client.Self.AgentID);
fetchItemEvent.WaitOne(INVENTORY_FETCH_TIMEOUT, false);
Client.Inventory.ItemReceived -= itemReceivedCallback;
return fetchItem;
}
private string DownloadNotecard(UUID itemID, UUID assetID)
{
AutoResetEvent assetDownloadEvent = new AutoResetEvent(false);
byte[] notecardData = null;
string error = bot.Localization.clResourceManager.getText("Commands.CreateNotecard.Timeout");
Client.Assets.RequestInventoryAsset(assetID, itemID, UUID.Zero, Client.Self.AgentID, AssetType.Notecard, true,
delegate(AssetDownload transfer, Asset asset)
{
if (transfer.Success)
notecardData = transfer.AssetData;
else
error = transfer.Status.ToString();
assetDownloadEvent.Set();
}
);
assetDownloadEvent.WaitOne(NOTECARD_FETCH_TIMEOUT, false);
if (notecardData != null)
return Encoding.UTF8.GetString(notecardData);
else
return String.Format(bot.Localization.clResourceManager.getText("Commands.CreateNotecard.DownloadError"), error);
}
}
}

Some files were not shown because too many files have changed in this diff Show More