Advertisement
Codefox

Untitled

Oct 31st, 2013
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.04 KB | None | 0 0
  1.  
  2.  
  3. class CLevelBot
  4. {
  5.     CTeleport m_teleport_engine;
  6.     uint m_player_vid;
  7.     uint m_current_time;
  8.     uint m_dead_time;
  9.     array <uint> m_enemies;
  10.     array <uint> m_pots;
  11.     uint m_last_attack;
  12.     int m_start_x;
  13.     int m_start_y;
  14.     int m_point_x;
  15.     int m_point_y;
  16.     int m_cur_tp;
  17.     int m_max_tp;
  18.     int m_tp_percent;
  19.     bool m_enabled;
  20.     bool m_player_at_point;
  21.     bool m_cur_tp_set;
  22.     bool m_was_dead;
  23.     bool m_first_start;
  24.    
  25.     array<item@> m_items;
  26.     uint m_pick_vid;
  27.    
  28.     CLevelBot()
  29.     {
  30.         this.m_enabled = false;
  31.         this.m_start_x = 0;
  32.         this.m_start_y = 0;
  33.         this.m_point_x = 0;
  34.         this.m_point_y = 0;
  35.         this.m_last_attack = 0;
  36.         this.m_dead_time = 0;
  37.         this.m_current_time = 0;
  38.         this.m_player_vid = 0;
  39.         this.m_player_at_point = false;
  40.         this.m_cur_tp_set = false;
  41.         this.m_was_dead = false;
  42.         this.m_first_start = true;
  43.        
  44.         this.m_pick_vid = 0;
  45.        
  46.         this.m_cur_tp = 0;
  47.         this.m_max_tp = 0;
  48.         this.m_tp_percent = 0;
  49.        
  50.         for(int i = 0; i < 90; i++)
  51.         {
  52.             this.m_pots.insertLast(0);
  53.         }
  54.        
  55.     }
  56.    
  57.     void Enable(bool enabled)
  58.     {
  59.         this.m_enabled = enabled;
  60.         if(enabled)
  61.             SYSLOG("Level Bot enabled!");
  62.         else
  63.             SYSLOG("Level Bot disabled!");
  64.     };
  65.    
  66.     void SetPlayerVID(uint vid)
  67.     {
  68.         this.m_player_vid = vid;
  69.         this.m_start_x = find_entity(vid).get_x();
  70.         this.m_start_y = find_entity(vid).get_y();
  71.         this.m_teleport_engine.set_vid(vid);
  72.     };
  73.    
  74.     void OnStartup()
  75.     {
  76.         if(cfg.get_string("bot.type","") == "levelbot")
  77.             this.Enable(true);
  78.     };
  79.    
  80.     void OnCleanup()
  81.     {
  82.     };
  83.    
  84.     void SetLevelPos(entity@ p)
  85.     {
  86.         int level = p.get_level();
  87.         int map = maps.GetMapByPos(p.get_x(), p.get_y());
  88.         int point_x = 0;
  89.         int point_y = 0;
  90.        
  91.         for(uint i = 0; i < cfg.get_int("point." + map + ".PointCount", 0); i++)
  92.         {
  93.            
  94.             if(cfg.get_int("point." + map+ "." + i + ".Type", 0) == 3
  95.                 && level >= cfg.get_int("point." + map + "." + i + ".LvMin", 0)
  96.                 && level <= cfg.get_int("point." + map + "." + i + ".LvMax", 0))
  97.             {
  98.                 point_x = ((cfg.get_int("point." + map + "." + i + ".PosX", 0)*100) + maps.m_map_base[map][0]);
  99.                 point_y = ((cfg.get_int("point." + map + "." + i + ".PosY", 0)*100) + maps.m_map_base[map][1]);
  100.                
  101.                 //DEVLOG("LEVELPOINT FOUND! X: " + point_x + " Y: " + point_y + " Lv: " + level);
  102.                 //DEVLOG("this.m_first_start: " + this.m_first_start + " this.m_player_at_point: " + this.m_player_at_point);
  103.  
  104.                 if((abs(p.get_x() - this.m_point_x) < 10000 && abs(p.get_y() - this.m_point_y) < 10000) && !this.m_first_start)
  105.                     this.m_player_at_point = true;
  106.                 else if((point_x != 0 && point_y != 0))
  107.                 {
  108.                     this.m_point_x = point_x;
  109.                     this.m_point_y = point_y;
  110.                     this.m_teleport_engine.set_destination(this.m_point_x, this.m_point_y);
  111.                     DEVLOG("Setting destination..");
  112.                     this.m_player_at_point = false;
  113.                     this.m_first_start = false;
  114.                 } else {
  115.                     this.m_player_at_point = true;
  116.                 }
  117.             };
  118.         };             
  119.     };
  120.    
  121.     void OnTick(uint current)
  122.     {
  123.         if(!this.m_enabled || this.m_player_vid == 0)
  124.             return;
  125.            
  126.         entity@ p = find_entity(this.m_player_vid);
  127.         SetLevelPos(p);
  128.        
  129.         if(!this.m_teleport_engine.is_teleporting() && !UsePotions() && !this.m_first_start) {
  130.            
  131.             if(this.m_was_dead)
  132.                 if(this.m_tp_percent < 80)
  133.                     return;
  134.            
  135.             this.m_was_dead = false;
  136.            
  137.             PickItems(p);
  138.            
  139.             if(current - this.m_last_attack >= 125 && this.m_player_at_point) {
  140.                 uint hit_count = 0;
  141.                 for(uint x = 0; x < get_entity_count(); ++x) {
  142.                     entity@ e = get_entity(x);
  143.                     if(e.get_type() != entity_mob)
  144.                         continue;
  145.                     if(this.m_enemies.find(e.get_vid())==-1)
  146.                         continue;
  147.                    
  148.                     int64 moblevel = parseInt(mob_proto_get(e.get_race(),"level"));
  149.                     if(moblevel > p.get_level()+5)
  150.                         continue;
  151.                    
  152.                     uint distx = abs(p.get_x()-e.get_x());
  153.                     uint disty = abs(p.get_y()-e.get_y());
  154.                     uint distance = sqrt((distx*distx)+(disty*disty));
  155.                    
  156.                     if(distance > 500)
  157.                         continue;
  158.                    
  159.                     net.send_attack(0,e.get_vid());
  160.                     ++hit_count;
  161.                     this.m_last_attack = current;
  162.                 }
  163.  
  164.                 if(hit_count == 0 && this.m_player_at_point) {
  165.                     for(uint x = 0; x < get_entity_count(); ++x) {
  166.                         entity@ e = get_entity(x);
  167.                         if(e.get_type() != entity_mob)
  168.                             continue;
  169.                         if(this.m_enemies.find(e.get_vid())==-1)
  170.                             continue;
  171.                    
  172.                         int64 moblevel = parseInt(mob_proto_get(e.get_race(),"level"));
  173.                         if(moblevel > p.get_level()+3)
  174.                             continue;
  175.  
  176.                         uint distance_x = abs(e.get_x() - this.m_point_x);
  177.                         uint distance_y = abs(e.get_y() - this.m_point_y);
  178.                         uint distance = sqrt((distance_x*distance_x)+(distance_y*distance_y));
  179.  
  180.                         if(distance < 10000) {
  181.                             this.m_teleport_engine.set_destination(e.get_x(),e.get_y());
  182.                             break;
  183.                         }
  184.                     }
  185.                    
  186.                     this.m_last_attack = 0;
  187.                 }
  188.             }
  189.         }
  190.        
  191.         this.m_teleport_engine.tick();
  192.         this.m_current_time = current;
  193.     };
  194.  
  195.     void OnPointChange(uint vid, uint type, int amount, int value)
  196.     {
  197.         if(type >= 83886090 && type <= 83886999) // HP
  198.         {
  199.             this.m_cur_tp = value;
  200.             this.m_cur_tp_set = true;
  201.         }
  202.        
  203.         if(!this.m_cur_tp_set)
  204.             this.m_cur_tp = this.m_max_tp;
  205.        
  206.         if(this.m_max_tp != 0 && this.m_cur_tp != 0)   
  207.             this.m_tp_percent = ceil((this.m_cur_tp*100)/this.m_max_tp);
  208.        
  209.         DEVLOG("tp_percent: " + this.m_tp_percent + ", cur_tp: " + this.m_cur_tp + ", max_tp: " + this.m_max_tp);
  210.         DEVLOG("type: " + type + ", amount: " + amount + ", value: " + value);
  211.     };
  212.    
  213.     void OnItemSet(uint8 pos, uint vnum, uint8 count, uint flags)
  214.     {
  215.         DEVLOG("ITEM SET - " + pos + ", " + vnum + ", " + count + ", " + flags);
  216.        
  217.         if(vnum == 27001 || vnum == 27002 || vnum == 27003)
  218.             this.m_pots[pos] = count;
  219.     };
  220.    
  221.     bool UsePotions()
  222.     {
  223.         if(this.m_tp_percent < 70 && this.m_max_tp > 10 && this.m_cur_tp_set)
  224.         {
  225.             for(int i = 0; i < 90; i++)
  226.                 if(this.m_pots[i] > 0)
  227.                     net.send_item_use(i);
  228.         }
  229.         return false;
  230.     };
  231.    
  232.     void PickItems(entity@ p)
  233.     {
  234.         int old_x = p.get_x();
  235.         int old_y = p.get_y();
  236.        
  237.         if(this.m_player_at_point && !this.m_teleport_engine.is_teleporting())
  238.         {
  239.        
  240.             if(this.m_pick_vid == 0 && this.m_items.length() > 0 && !this.m_teleport_engine.is_teleporting()) {
  241.                 item@ i = this.m_items[0];
  242.  
  243.                 this.m_pick_vid = i.get_vid();
  244.                 this.m_teleport_engine.set_destination(i.get_x(),i.get_y());
  245.             }
  246.  
  247.             if(this.m_pick_vid != 0 && !this.m_teleport_engine.is_teleporting()) {
  248.            
  249.                 item@ i = find_item(this.m_pick_vid);
  250.                
  251.                 if(i.get_vnum() == 27001 || i.get_vnum() == 27002 || i.get_vnum() == 27003 || i.get_vnum() == 1)
  252.                     net.send_pick_up(this.m_pick_vid); 
  253.                        
  254.                 int idx = this.m_items.find(i);
  255.                 if(idx != -1)
  256.                     this.m_items.removeAt(idx);
  257.                        
  258.                 this.m_pick_vid = 0;
  259.             }
  260.         }
  261.    
  262.     };
  263.    
  264.     void OnCharacterAdd(entity@ e)
  265.     {
  266.         this.m_enemies.insertLast(e.get_vid());
  267.     };
  268.    
  269.     void OnCharacterDelete(entity@ e)
  270.     {
  271.         int idx = this.m_enemies.find(e.get_vid());
  272.         if(idx != -1)
  273.             this.m_enemies.removeAt(idx);
  274.     };
  275.     void OnCharacterDead(entity@ e)
  276.     {
  277.         if(e.get_vid() == this.m_player_vid) {
  278.             while(this.m_enemies.length() > 0)
  279.                 this.m_enemies.removeAt(0);
  280.             this.m_player_vid = 0;
  281.             this.m_teleport_engine.set_vid(0);
  282.             this.m_was_dead = true;
  283.             net.connect(net.get_ip(),net.get_port());
  284.         }
  285.         int idx = this.m_enemies.find(e.get_vid());
  286.         if(idx != -1)
  287.             this.m_enemies.removeAt(idx);
  288.     };
  289.    
  290.     void OnCharacterUpdate(entity@ e)
  291.     {
  292.     };
  293.    
  294.     void OnWarp(int x, int y, string addr, uint port)
  295.     {
  296.     };
  297.    
  298.     void OnItemGroundAdd(item@ i)
  299.     {
  300.         this.m_items.insertLast(i);
  301.     };
  302.  
  303.     void OnItemGroundDelete(item@ i)
  304.     {
  305.         int idx = this.m_items.find(i);
  306.         if(i.get_vid() == this.m_pick_vid)
  307.             this.m_pick_vid = 0;
  308.  
  309.         if(idx != -1)
  310.             this.m_items.removeAt(idx);
  311.     };
  312.  
  313.     void OnItemOwnership(item@ i)
  314.     {
  315.         int idx = this.m_items.find(i);
  316.         if(i.get_owner() == this.m_player_vid || i.get_owner() == 0) {
  317.             if(idx == -1)
  318.                 this.m_items.insertLast(i);
  319.         } else {
  320.             if(i.get_vid() == this.m_pick_vid)
  321.                 this.m_pick_vid = 0;
  322.  
  323.             if(idx != -1)
  324.                 this.m_items.removeAt(idx);
  325.         }
  326.     };
  327.    
  328.     void OnPointsSet(array<int> pts)
  329.     {
  330.         if(pts[6] != 0)
  331.             this.m_max_tp = pts[6];
  332.     };
  333. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement