--empty Define Properties() selected_object_id = 0 selected_object_label = 0 command_state = "default" pets = {} end Define Commands() -- INPUTS -- MakeInput(input-description, input-code, input-event, input-modifier, command-string) MakeInput('pick','mouse-object', 'click', 'none', 'pick') MakeInput('move', 'mouse-terrain', 'click', 'none', 'move') MakeInput('claim', 'c', 'up', 'none', 'claim') MakeInput('claim2', 'x', 'up', 'none', 'claim2') MakeInput('enter_move', 'm', 'down', 'none', 'enter_move') MakeInput('exit_move', 'm', 'up', 'none', 'exit_move') MakeInput('summon', 's', 'up', 'none', 'summon') MakeInput('dismiss', 'd', 'up', 'none', 'dismiss') MakeInput('whistle', 'w', 'up', 'none', 'whistle') MakeInput('fire_arrow', 'f', 'down', 'none', 'fire_arrow') MakeInput('test', 'a', 'down', 'none', 'test') -- COMMANDS MakeCommand("pick", "pick an object", "target:object") MakeCommand("claim", "claim ownership of an object") MakeCommand("claim2", "web pets claim ownership") MakeCommand("enter_move", "enter move state") MakeCommand("exit_move", "exit move state") MakeCommand("move", "request movement", "x:int", "y:int", "z:int") MakeCommand("summon", "summon meep") MakeCommand("dismiss", "dismiss meep") MakeCommand("whistle", "whistle for pets") MakeCommand("fire_arrow", "fires an arrow") MakeCommand("test", "test") end -- COMMANDS -- Pick -- Click on an object - no SHFT, CTRL, ALT modifiers Command pick(target) -- order selected pet meep to go to object if((self.selected_object_id > 0) and (self.command_state == "move")) then -- order meep to move to and use object Debug("Requesting object move to object %d", target.id) SendTo(GetObjectById(self.selected_object_id), 'request_move', 0, self.id, target.x, target.y, 0) Debug("Send msg") else -- select the picked object SendTo(target, "selectObject", 0, self) Debug("%s has selected %s(%d - %d)", self.name, target.type, target.id, self.selected_object_id) end end -- Test -- Reusable command for testing new script(s) Command test() SendTo(self, 'webPetsDismissPet', 0, self.petList[1].id) --for i,_ in pairs(self.petList) do -- self.petList[i] = {} --end --SendTo(self, 'webPetsGetPetList', 0) --for i,v in pairs(self.petList) do -- Debug("%d %s %s %s %s", i, v.id, v.name, v.isactive, v.assetid) --end end -- Claim -- Claim a pet as your own Command claim() if(self.selected_object_id == 0) then -- Debug("No object selected to attempt to claim.") AlertToUser(self, 1500, "You must select a meep to claim as a pet") else -- Debug("Sending attempt_claim message %d", self.id) SendTo(GetObjectById(self.selected_object_id), 'attempt_claim', 0, self.id) end end -- Claim2 -- Claim a pet using WebPets Library triggers Command claim2() if(self.selected_object_id == 0) then -- Debug("No object selected to attempt to claim.") AlertToUser(self, 1500, "You must select a meep to claim as a pet") else -- Debug("Sending attempt_claim message %d", self.id) SendTo(GetObjectById(self.selected_object_id), 'attempt_claim2', 0, self.id) end end -- Enter_move -- Switch to "move" command state, command pet Command enter_move() -- should check that self own's the selected_object here if ((self.selected_object_id > 0) and (GetObjectById(self.selected_object_id).owner == self.id)) then -- Debug("Entered move state %d", self.id) self.command_state = "move" -- set cursor UiSetCursor(self, "13197:140", 16, 16) -- should attach pet behavior script here -- detach script that handles player mouse_clicks DetachScriptById(self, "8282:17") else AlertToUser(self, 1500, "Select one of your pets or claim a wild pet.") end end -- Exit_move -- Exits the pet mvmt control state Command exit_move() -- Debug("Exit move state %d", self.id) self.command_state = "default" -- set cursor UiSetCursor(self, -1, 0, 0) -- attach script that handles player mouse_clicks AttachScriptById(self, "8282:17") end -- Move -- If in move state and object selected, request object move Command move(x, y, z) if((self.command_state == "move") and (self.selected_object_id > 0)) then -- Debug("Requesting object move to terrain location") SendTo(GetObjectById(self.selected_object_id), 'request_move', 0, self.id, x, y, z) end end Command summon() -- summon a pet Debug("Summoning pet") if(self.petList[1].isactive == "false") then SendTo(self, "webPetsActivatePet", 0, 1) end end Command dismiss() -- destroy currently selected meep if((self.selected_object_id > 0) and (GetObjectById(self.selected_object_id).owner == self.id)) then Debug("Dismiss meep %d", self.selected_object_id) SendTo(self, "webPetsDismissPet", 0, 1) else Debug("No object selected") end end Command whistle() -- call for pets for index, target in ipairs(self.pets) do xoffset = math.random(0, 2) - 1 yoffset = math.random(0, 2) - 1 SendTo(GetObjectById(target), 'request_move', 1500, self.id, self.x + xoffset, self.y + yoffset, self.z) end PlaySoundPlace("0:5", 100, 0) end Command fire_arrow() SendTo(GetObjectById(self.selected_object_id), 'fire_arrow', 0, self, "arrow") end -- Trigger Trigger attach() -- get pets SendTo(self, 'webPetsGetPetList', 0, self.id) end Trigger activatePetSuccess(pet_id) Debug("activatePetSuccess") for i,v in pairs(self.petList) do if (v.id == pet_id) then SendTo(self, "webPetsCreatePet", 0, i) self.petList[i].isactive = "true" return end end end Trigger dismissPetSuccess(pet_id) Debug("dismissPetSuccess") self.petList[i].isactive = "false" PlaySoundRadius(GetObjectById(self.selected_object_id), 10, "0:6", 100, 0) SendTo(GetObjectById(self.selected_object_id), "die",500) self.selected_object_id = 0 end Trigger detach() if (self.selected_object_label ~= 0) then UiDelete(self.selected_object_label) end end Trigger left() for index, target in ipairs(self.pets) do Debug("Wild: %d", target) SendTo(GetObjectById(target), 'go_wild', 0) end end Trigger attachSelected(object) self.selected_object_id = object.id updateSelectLabel(self, object) end Trigger claim_success(object) table.insert(self.pets, object.id) updateSelectLabel(self, object) end function updateSelectLabel(self, object) -- delete any existing label if(self.selected_object_label ~= 0) then UiDelete(self.selected_object_label) end self.selected_object_label = UiLabel(0, "select label", object.x-44, object.y-32, object.name) UiAttachUserObject(self, object, self.selected_object_label) end