예제 #1
0
    def OnUpdate(self):
        val, self.lastTime = OpenLib.timeSleep(self.lastTime, TIME_WAIT)
        if not val or self.State == STATE_NONE or not OpenLib.IsInGamePhase():
            return
        if self.State == STATE_WAITING_OPEN_SHOP:
            #chat.AppendChat(3,"Waiting for shop to be open.")
            if shop.IsOpen():
                self.State = STATE_SELLING
                return
            self.OpenShop()

        if self.State == STATE_SELLING:
            val, self.lastTimeSell = OpenLib.timeSleep(self.lastTimeSell,
                                                       TIME_SELL)
            if val:
                if len(self.sellItems_list) == 0:
                    self.State = STATE_BUYING
                    return
                slot = self.sellItems_list.pop(0)
                net.SendShopSellPacketNew(slot, player.GetItemCount(slot), 1)
                chat.AppendChat(3,
                                "[NPC-SHOPER] Sold item at slot " + str(slot))
            return

        if self.State == STATE_BUYING:
            val, self.lastTimeBuy = OpenLib.timeSleep(self.lastTimeBuy,
                                                      TIME_BUY)
            if (val):
                if len(self.buyItems_list) == 0:
                    self.State = STATE_FINISH_SHOPPING
                    return
                slot = self.buyItems_list.pop(0)
                net.SendShopBuyPacket(slot)
            else:
                return

        if self.State == STATE_FINISH_SHOPPING:
            self.EndNPCBusiness()
            return

        if self.State == STATE_GIVING_ITEMS:
            val, self.lastTimeGive = OpenLib.timeSleep(self.lastTimeGive,
                                                       TIME_GIVE_ITEM)
            if not val:
                return
            if len(self.giveItems_list) == 0:
                self.EndNPCGiveItem()
                return
            else:
                vid = self.npcAction.SearchVIDClosest()
                if vid == None:
                    #chat.AppendChat(3,"[NPC-GIVER] No NPC with vid " +str(vid)+" is close.")
                    self.EndNPCGiveItem()
                    return
                else:
                    slot = self.giveItems_list.pop()
                    #chat.AppendChat(3,"[NPC-GIVER] Giving "+  str(player.GetItemCount(slot)) + " item(s) at slot " +str(slot)+" to VID " +str(vid))
                    net.SendGiveItemPacket(vid, player.SLOT_TYPE_INVENTORY,
                                           slot, player.GetItemCount(slot))
                    OpenLib.skipAnswers(self.npcAction.event_answer)
예제 #2
0
 def OnUpdate(self):
     if self.State == self.STATE_NONE or not OpenLib.IsInGamePhase():
         return
     val, self.generalTimer = OpenLib.timeSleep(self.generalTimer,
                                                TIME_WAIT_MAP_CHANGE)
     if not val:
         return
     if self.State == self.STATE_MOVING:
         OpenLog.DebugPrint("[MAP] - State Moving")
         if self.currLink.GetOriginMapName(
         ) != background.GetCurrentMapName():
             self.SetStateMapChanging()
         return
     if self.State == self.STATE_MAPCHANGING:
         OpenLog.DebugPrint("[MAP] - State Map Changing")
         self.StateMapChanging()
예제 #3
0
    def OnUpdate(self):
        val, self.generalTimer = OpenLib.timeSleep(self.generalTimer,
                                                   TIME_WAIT)
        if not val or not OpenLib.IsInGamePhase():
            return

        OpenLog.DebugPrint("[MOVEMENT] - State:" + str(self.state))
        if not (self.state == STATE_MOVING) or len(self.path) == 0:
            return

        next_x, next_y = self.path[0]
        my_x, my_y, my_z = player.GetMainCharacterPosition()
        maxdst = 40
        if (len(self.path) == 1):
            maxdst = self.maxDistanceToDest
        if OpenLib.dist(next_x, next_y, my_x, my_y) < maxdst:
            self.path.pop(0)
            if (len(self.path) == 0):
                #Destination Reached
                self.state = STATE_FINISH
                if (self.callback != None):
                    self.callback()
                    self.callback = None
                self.currDestinationX = 0
                self.currDestinationY = 0
                return
            else:
                next_x, next_y = self.path[0]

        if self.lastPlayerPos == (my_x, my_y):
            val, self.stoppedTimer = OpenLib.timeSleep(self.stoppedTimer,
                                                       TIME_STOPPED_ALLOWED)
            if val:
                #If is stuck
                self.path = net_packet.FindPath(my_x, my_y,
                                                self.currDestinationX,
                                                self.currDestinationY)
                #player.ClickSkillSlot(9)

        self.lastPlayerPos = (my_x, my_y)
        self.GoStraightToPoint(next_x, next_y)
예제 #4
0
    def OnUpdate(self):
        val, self.lastTime = OpenLib.timeSleep(self.lastTime, 0.1)
        if (val and self.enableButton.isOn and OpenLib.IsInGamePhase()):
            if self.state == self.STATE_WAITING:
                valWaitState, self.lastTimeWaitState = OpenLib.timeSleep(
                    self.lastTimeWaitState,
                    self.WaitDelaySlider.GetSliderPos() * 10)
                if valWaitState:
                    if self.CheckInv() == False:
                        return
                    net_packet.SendStartFishing(2)
                    chat.AppendChat(
                        3, "[Fishing-Bot] Using bait, and start fishing")
                    self.SetState(self.STATE_FISHING)
                    self.lastTimeFishState = OpenLib.GetTime()
                    self.isRodDown = True
                    self.isMoving = False

            if self.state == self.STATE_FISHING:
                valFishState, self.lastTimeFishState = OpenLib.timeSleep(
                    self.lastTimeFishState,
                    self.StartStopDelaySlider.GetSliderPos() * 10)
                if valFishState:
                    chat.AppendChat(3, "[Fishing-Bot] Pulling Rod")
                    net_packet.SendStopFishing(
                        net_packet.SUCCESS_FISHING,
                        self.ServerDelaySlider.GetSliderPos() * 10)
                    self.lastTimeWaitState = OpenLib.GetTime()
                    self.SetState(self.STATE_WAITING)
                    self.isRodDown = False

            if self.state == self.STATE_GOING_TO_SHOP:
                #The callback will take care of leaving the state
                pass

            if self.state == self.STATE_IMPROVING_ROD:
                val, self.lastTimeImprove = OpenLib.timeSleep(
                    self.lastTimeImprove, 0.5)
                if not val:
                    return

                self.LevelUpRod()

        if self.state == self.STATE_PLACE_FIRE:
            val, self.lastTimeFire = OpenLib.timeSleep(self.lastTimeFire, 0.2)
            if not val:
                return
            for vid in net_packet.InstancesList:
                chr.SelectInstance(vid)
                race = chr.GetRace()
                if race == self.campFireRace:
                    self.GrillFishes(vid)
                    if self.enableButton.isOn:
                        Movement.GoToPositionAvoidingObjects(
                            self.startPosition[0],
                            self.startPosition[1],
                            callback=_PositionRestoreCallback,
                            maxDist=250)
                        self.SetState(self.STATE_GOING_TO_SHOP)
                    else:
                        self.SetState(self.STATE_WAITING)