This is a quick and dirty guide to writing a profile in Buddywing - I may make it fancy at a later date Gathering / Chest Profiles: This can be any of these 3, and they are all acceptable: GrindProfile, take out the mobs and leave the hotspots UseObect QuestId="1" with multiple hotspots Move QuestId="1" - a lot of moveto's in a row GrindProfile w/o mobs Code: <Profile xmlns="http://tempuri.org/ProfileSchema.xsd"> <Name>Grinding level 6ish</Name> <Vendors> <Hotspot Name="Nad'alin" X="-13.0963" Y="-2.503603" Z="-93.1485" /> <!-- The Gnarls --> <Hotspot Name="Republic Medical Droid" X="-15.3679" Y="-8.133331" Z="-42.8" /> <!-- Jedi Temple --> <Hotspot Name="Republic Medical Droid" X="13.2112" Y="-0.7676925" Z="-32.1017" /> <!-- Kalikori Village --> <Hotspot Name="Republic Medical Droid" X="-21.5248" Y="-2.668555" Z="-7.8756" /> <!-- Forward Camp --> <Hotspot Name="Republic Medical Droid" X="-0.2154" Y="3.977503" Z="47.8403" /> <!-- The Forge (S. Tython) --> </Vendors> <GrindAreas> <GrindArea Name="Flesh Raiders"> <MinLevel>1</MinLevel> <MaxLevel>9</MaxLevel> <Hotspots> <Hotspot Name="Flesh Raider Stalker" X="21.9674" Y="0.5871694" Z="-28" /> <Hotspot Name="Flesh Raider Pillager" X="23.55397" Y="0.8520655" Z="-27.82022" /> <Hotspot Name="Flesh Raider Loreseeker" X="26.38745" Y="-3.514936" Z="-12.54061" /> <Hotspot Name="Flesh Raider Tech Salvager" X="31.58759" Y="-3.607875" Z="-11.78759" /> <Hotspot Name="Flesh Raider Salvager" X="33.17172" Y="-3.076517" Z="-14.54137" /> <Hotspot Name="Flesh Raider Stalker" X="36.38931" Y="-3.647701" Z="-12.75494" /> <Hotspot Name="Flesh Raider Beast Handler" X="40.95205" Y="-1.460363" Z="-14.7401" /> <Hotspot Name="Flesh Raider Shaman" X="38.4" Y="-1.180024" Z="-6.4" /> <Hotspot Name="My Location" X="38.47871" Y="-1.202698" Z="-16.99549" /> <Hotspot Name="Flesh Raider Tech Salvager" X="46.24964" Y="-1.318422" Z="-16.43253" /> <Hotspot Name="My Location" X="47.25857" Y="-1.373355" Z="-19.98298" /> <Hotspot Name="Flesh Raider Loreseeker" X="46.34" Y="-0.2165156" Z="-12.08" /> <Hotspot Name="Flesh Raider Loreseeker" X="44.1" Y="1.015183" Z="-9.200001" /> <Hotspot Name="Flesh Raider Chief Shaman" X="44.02" Y="1.338866" Z="-4.62" /> </Hotspots> </GrindArea> </GrindAreas> <Grind GrindRef="Flesh Raiders" While="Me.Level < 10" /> </Profile> Useobject profile Code: <Profile xmlns="http://tempuri.org/ProfileSchema.xsd"> <Name>My lockbox or gathering profile</Name> <Vendors> <!-- Add vendor(s) --> </Vendors> <Questing> <UseObject QuestId="1" IgnoreLOS="True" Radius="200" WaitTime="5" > <Placeables> <Placeable>Some Lockbox</Placeable> </Placeables> <Hotspots> <Hotspot XYZ /> <!-- Add multiple hotspots here --> </Hotspots> </UseObject> </Questing> </Profile> MoveTo profile Code: <Profile xmlns="http://tempuri.org/ProfileSchema.xsd"> <Name>My Lockbox or Gathering Profile</Name> <Vendors> <!-- Add vendor(s) --> </Vendors> <Questing> <MoveTo QuestId="1" X Y Z /> <!-- Just add the xyz from hotspots and you're done --> </Questing> </Profile> Grinding Profiles: These just Grind, simple as that. Code: <Profile> <Name>Name of Profile</Name> <Vendors> <!-- vendors here --> </Vendors> <GrindAreas> <!-- Grind Area's Here --> <GrindArea Name=""> <MinLevel>1</MinLevel> <MaxLevel>50</MaxLevel> <Mobs> <Mob></Mob> <Mob></Mob> <Mob></Mob> <Mob></Mob> <Mob></Mob> <Mob></Mob> </Mobs> <Hotspots> </Hotspots> </GrindArea> </GrindAreas> <Grind GrindRef="" While="Me.Level < 51" /> </Profile> Actual Grinding Profile that works: Code: <Profile xmlns="http://tempuri.org/ProfileSchema.xsd"> <Name>Grinding level 6ish</Name> <Vendors> <Hotspot Name="Nad'alin" X="-13.0963" Y="-2.503603" Z="-93.1485" /> <!-- The Gnarls --> <Hotspot Name="Republic Medical Droid" X="-15.3679" Y="-8.133331" Z="-42.8" /> <!-- Jedi Temple --> <Hotspot Name="Republic Medical Droid" X="13.2112" Y="-0.7676925" Z="-32.1017" /> <!-- Kalikori Village --> <Hotspot Name="Republic Medical Droid" X="-21.5248" Y="-2.668555" Z="-7.8756" /> <!-- Forward Camp --> <Hotspot Name="Republic Medical Droid" X="-0.2154" Y="3.977503" Z="47.8403" /> <!-- The Forge (S. Tython) --> </Vendors> <GrindAreas> <GrindArea Name="Flesh Raiders"> <MinLevel>1</MinLevel> <MaxLevel>9</MaxLevel> <Mobs> <Mob>Flesh Raider Stalker</Mob> <Mob>Flesh Raider Pillager</Mob> <Mob>Flesh Raider Loreseeker</Mob> <Mob>Flesh Raider Salvager</Mob> <Mob>Flesh Raider Tech Salvager</Mob> </Mobs> <Hotspots> <Hotspot Name="Flesh Raider Stalker" X="21.9674" Y="0.5871694" Z="-28" /> <Hotspot Name="Flesh Raider Pillager" X="23.55397" Y="0.8520655" Z="-27.82022" /> <Hotspot Name="Flesh Raider Loreseeker" X="26.38745" Y="-3.514936" Z="-12.54061" /> <Hotspot Name="Flesh Raider Tech Salvager" X="31.58759" Y="-3.607875" Z="-11.78759" /> <Hotspot Name="Flesh Raider Salvager" X="33.17172" Y="-3.076517" Z="-14.54137" /> <Hotspot Name="Flesh Raider Stalker" X="36.38931" Y="-3.647701" Z="-12.75494" /> <Hotspot Name="Flesh Raider Beast Handler" X="40.95205" Y="-1.460363" Z="-14.7401" /> <Hotspot Name="Flesh Raider Shaman" X="38.4" Y="-1.180024" Z="-6.4" /> <Hotspot Name="My Location" X="38.47871" Y="-1.202698" Z="-16.99549" /> <Hotspot Name="Flesh Raider Tech Salvager" X="46.24964" Y="-1.318422" Z="-16.43253" /> <Hotspot Name="My Location" X="47.25857" Y="-1.373355" Z="-19.98298" /> <Hotspot Name="Flesh Raider Loreseeker" X="46.34" Y="-0.2165156" Z="-12.08" /> <Hotspot Name="Flesh Raider Loreseeker" X="44.1" Y="1.015183" Z="-9.200001" /> <Hotspot Name="Flesh Raider Chief Shaman" X="44.02" Y="1.338866" Z="-4.62" /> </Hotspots> </GrindArea> </GrindAreas> <Grind GrindRef="Flesh Raiders" While="Me.Level < 10" /> </Profile> Daily Quests / Leveling Questing Profiles: This is the big pain Picking up Quests - First one is from an NPC (target, dump target, copy the name and xyz /> - paste onto Giver). Get quest from giver, dump quests, copy the name and Quest Id into their slots. Gameobjects are the 2nd line (Placeable, UseRange 2) - get the xyz near the Object that gives the quest, type in the GiverName correctly. Dump quest and paste in the name / questid Code: <PickUpQuest QuestName="" QuestId="" Giver <PickUpQuest QuestName="" QuestId="" Type="Placeable" UseRange="2" GiverName="" Turnin Quests - Same as picking up, but you turnin. Most of the time you have the Complete quest function that you'll also have to add in after Code: <!-- Turnin <If Condition="((HasQuest()) and (not IsQuestComplete()))"> <TurnInQuest QuestName="" QuestId="" TurnIn </If> <CompleteQuest QuestName="" QuestId="" RewardIndex="1" /> <CompleteQuest QuestName="" QuestId="" /> <!-- Turnin <If Condition="((HasQuest()) and (not IsQuestComplete()))"> <TurnInQuest QuestName="" QuestId="" Type="Placeable" UseRange="2" TurnInName="" </If> <CompleteQuest QuestName="" QuestId="" RewardIndex="1" /> <CompleteQuest QuestName="" QuestId="" /> ^^ You'll see this in my BlankQO (or something similar). I use conditions around my turnin's, you don't always have to, I just like to minimize after. I fill in the information, i delete whichever completequest I don't need (RewardIndex is only used when there are rewards to select from. Delete the one w/o rewards if there are rewards... delete the one with rewards if there are no rewards to click on (either 1 reward, or no rewards - use this)) Here is how Apoc likes it (and it's completely viable). I just think mine looks prettier Code: <TurnInQuest QuestName="" QuestId="" TurnIn <CompleteQuest QuestName="" QuestId="" RewardIndex="1" /> <TurnInQuest QuestName="" QuestId="" Type="Placeable" UseRange="2" TurnInName="" <CompleteQuest QuestName="" QuestId="" RewardIndex="1" /> Quests themselves: Conditions: not IsQuestComplete - generally for bonus quests has quest and not iqc - generally for most quests hq and not iqc + hq and not ibsc - for when you need to add steps to a quest hq and not iqc + hq and not ibsc + hq and not ibtc - for when you need to add steps and tasks to a quest You can take out the hasquests's if you like, but I keep them in (this drives apoc nuts) GrindRef - for when you need to simply grind for a step or task, make sure you add the grindarea above with the *exact* name Code: <!-- <If Condition="(not IsQuestComplete())"> <Grind GrindRef="" While="(not IsQuestComplete())" /> </If> <Grind GrindRef="" While="(not IsBranchStepComplete(, 1, 2))" /> <Grind GrindRef="" While="(not IsBranchTaskComplete(, 1, 2, 0))" /> <!-- <If Condition="((HasQuest()) and (not IsQuestComplete()))"> </If> <!-- <If Condition="((HasQuest()) and (not IsQuestComplete()))"> <If Condition="((HasQuest()) and (not IsBranchStepComplete(, 1, 2)))"> </If> </If> <!-- <If Condition="((HasQuest()) and (not IsQuestComplete()))"> <If Condition="((HasQuest()) and (not IsBranchStepComplete(, 1, 2)))"> <If Condition="((HasQuest()) and (not IsBranchTaskComplete(, 1, 2, 0)))"> </If> </If> </If> UseObject Quests :: Interact - Only use this if it doesn't relate to a step/task! IE: Use Holoterminal on ship... You need to interact with your ship door to get onto your ship. <UseObject QuestId="" Name="" IgnoreLOS="True" IgnoreQuestRelation="True" - Ignore Quest Relation is for when regular useobject doesn't work <UseObject QuestId="" BranchId="1" StepId="2" IgnoreLOS="True" Radius="5" WaitTime="5" Name="" - regular useobject, plug in the name and xyz <UseObject QuestId="" BranchId="1" StepId="2" TaskId="0" IgnoreLOS="True" Radius="5" WaitTime="5" Name="" - regular useobject, plug in the name and xyz; do note: this is for when you have multiple tasks! UseObject Bid 1 Sid 2 etc - this is for multiple hotspots (1 or more placeables) UseObject Bid 1 Sid 2 Tid 0 etc - this is for multiple hotspots (1 or more placeables); do note: this is for when you have multiple tasks! Code: <Interact IgnoreLOS="True" WaitTime="5" Name="" <UseObject QuestId="" BranchId="1" StepId="2" Name="" IgnoreLOS="True" IgnoreQuestRelation="True" <UseObject QuestId="" BranchId="1" StepId="2" IgnoreLOS="True" Radius="5" WaitTime="5" Name="" <UseObject QuestId="" BranchId="1" StepId="2" TaskId="0" IgnoreLOS="True" Radius="5" WaitTime="5" Name="" <UseObject QuestId="" BranchId="1" StepId="2" IgnoreLOS="True" Radius="50" WaitTime="5" > <Placeables> <Placeable></Placeable> </Placeables> <Hotspots> </Hotspots> </UseObject> <UseObject QuestId="" BranchId="1" StepId="2" TaskId="0" IgnoreLOS="True" Radius="50" WaitTime="5" > <Placeables> <Placeable></Placeable> </Placeables> <Hotspots> </Hotspots> </UseObject> UseRange="2" BlacklistDuration="" Amount="2" UseItem Quests: These are a huge pita atm and don't work 1/2 of the time, but here's the syntax. Same logic as UseObject, but these must be in conditions as they <While> whatever condition they're in If you need to use it at a location / on nothing, delete OnObject="", change range to 1, radius to 1 Code: <UseItem QuestId="" Item="" OnObject="" WaitTime="3" Range="4" InCombat="False" Radius="10" <UseItem QuestId="" Item="" WaitTime="3" Range="4" InCombat="False" Radius="20" > <Npcs> <Npc></Npc> </Npcs> <Hotspots> </Hotspots> </UseItem> <UseItem QuestId="" Item="" WaitTime="3" Range="4" InCombat="False" Radius="20" > <Npcs> <Npc></Npc> </Npcs> <Hotspots> </Hotspots> </UseItem> DeadOnly="True" HealthPercent="" ie: <If Condition="((HasQuest(0xE0003CB046F6D52F)) and (not IsBranchStepComplete(0xE0003CB046F6D52F, 1, 3)))"> <UseItem QuestId="0xE0003CB046F6D52F" Item="Dark Crystal" OnObject="Corrupted Voss" WaitTime="3500" Range="2" InCombat="True" Radius="100" > <Hotspots> <Hotspot Name="Corrupted Voss" X="81.492" Y="-2.029311" Z="-17.7376" /> <Hotspot Name="Corrupted Voss" X="74.69138" Y="-2.873498" Z="-23.29395" /> <Hotspot Name="Corrupted Voss" X="63.7393" Y="-2.773375" Z="-19.0297" /> <Hotspot Name="Corrupted Voss" X="67.25663" Y="-2.791917" Z="-21.75548" /> <Hotspot Name="Corrupted Voss" X="66.54269" Y="-2.787395" Z="-13.9441" /> <Hotspot Name="Corrupted Voss" X="63.7058" Y="-2.782363" Z="-23.8915" /> <Hotspot Name="Corrupted Voss" X="63.2729" Y="-2.763089" Z="-28.7362" /> </Hotspots> </UseItem> </If> MoveTo, TalkTo, AnswerHolocom: These must all be in a condition, I recommend waittimers for anything that has a cutscene - sometimes the bot is too fast and thinks the quest is done. Code: <TalkTo QuestId="" <WaitTimer QuestId="1" WaitTime="8" /> <Moveto QuestId="" <AnswerHolocomCall QuestName="" QuestId="" /> <WaitTimer QuestId="1" WaitTime="8" /> Other tags and stuffs AreaID is the planet ID, obtained from 'my location' button. paste it after the 0x Me.Position.X/Y/Z is for checking long, lat, and height X is longitude Z is latitude Y is height UseTransport is Taxi default, Type="Wonkavator" is when you select where to go (shuttle door, elevator, etc) You cannot usetransport for 'auto elevators' - those have to be added to the mesh. We need the top stand-at and the bottom autopickup. and the PlanetID (my location button) JumpTo - You'll probably never have to do this manually - but there's only a few times that you have to dump onto a box, or onto a platform that the mesh cannot nav to. The notes are in my BlankQO for this UserDialog - stops the bot and pops up a qq box ForceVendor is exactly that. it goes to an npc and executes it's argument (repair/sell, train) Code: <If Condition="(BuddyTor.Client.AreaID == 0x)"> </If> <If Condition="(Me.Position.X < )"> </If> <If Condition="(Me.Position.Y < )"> </If> <If Condition="(Me.Position.Z < )"> </If> <JumpTo QuestId="1" JumpRotation="" End <If Condition="(Me.AdvancedClass == AdvancedClass.Sage)"> </If> <If Condition="(Me.Class == CharacterClass.Consular)"> </If> <If Condition="Me.Level < 10"> <Grind GrindRef="" While="Me.Level < 10" /> </If> <UserDialog Title="Test" Message="insert issue here" /> <ForceVendor VendorType="Train" /> <ForceVendor VendorType="Repair" /> I piggyback taxi's and wonka's a lot... you don't have to, but if you don't, you need to use the me.position.x y z's