Advertisement
nPhoenix

MV.js

Oct 26th, 2019
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var async = require("async"),
  2.     _ = require("underscore");
  3.  
  4. var Species = require("./species.js"),
  5.     Bag = require("./bag.js");
  6.  
  7. var Player = function (socket, auth, db, scServer) {
  8.     this.socket = socket;
  9.     this.auth = auth;
  10.     this.db = db;
  11.     this.scServer = scServer;
  12. };
  13.  
  14. // quando jogador conecta
  15. Player.prototype.connect = function () {
  16.  
  17.     async.parallel({
  18.         // pegar posições do mapa
  19.         map: (next) => {
  20.             this.db.mysql.query(
  21.                 "SELECT `pos_x`, `pos_y`, `pos_facing`, `map` FROM `map_position` WHERE `uid` = '" + this.auth.uid + "'",
  22.                 function (err, results, fields) {
  23.                     next(err, results[0]);
  24.                 }
  25.             );
  26.         },
  27.         // pegar monstros do player
  28.         monsters: (next) => {
  29.             new Species(this.socket, this.auth, this.db)
  30.                 .getMonstersInPocket(next);
  31.         },
  32.         // pegar itens do player
  33.         items: (next) => {
  34.             new Bag(this.socket, this.auth, this.db)
  35.                 .getItems(next);
  36.         },
  37.         // pegar flags do mapa
  38.         flags: (next) => {
  39.             this.db.mysql.query(
  40.                 "SELECT `flag_id`, `value` FROM `flags` WHERE `uid` = '" + this.auth.uid + "' AND `type` = 'm'",
  41.                 function (err, results, fields) {
  42.                     next(err, results);
  43.                 }
  44.             );
  45.         },
  46.         // o que jogador está fazendo atualmente
  47.         current: (next) => {
  48.             this.db.mysql.query(
  49.                 "SELECT `battle_type`, `waiting_wild_battle` FROM `current_doing` WHERE `uid` = '" + this.auth.uid + "'",
  50.                 function (err, results, fields) {
  51.                     next(err, results[0]);
  52.                 }
  53.             )
  54.         },
  55.     }, (err, data) => {
  56.         // preparar informações pro client
  57.         this.prepareInitialInfoToClient(
  58.             data
  59.         );
  60.     });
  61. };
  62.  
  63. // quando jogador desconecta
  64. Player.prototype.disconnect = function () {
  65.     console.log(`Jogador ID ${this.auth.uid} desconectou.`);
  66. };
  67.  
  68. // ping-pong
  69. Player.prototype.pong = function () {
  70.     this.socket.emit("0");
  71. };
  72.  
  73. // prepara informação para client iniciar o jogo
  74. Player.prototype.prepareInitialInfoToClient = function (data) {
  75.     /*console.log(
  76.         "map, flags, current",
  77.         data.map,
  78.         data.flags,
  79.         data.current
  80.     );*/
  81.  
  82.     //console.log("flagsss", data.flags);
  83.  
  84.     // pegando flag do mapa que está atualmente
  85.     var flag = _.findWhere(data.flags, {
  86.         flag_id: String(data.map.map)
  87.     });
  88.  
  89.     // transformando string em número
  90.     data.current.battle_type = parseInt(data.current.battle_type);
  91.  
  92.     // caso esteja batalhando
  93.     if (data.current.battle_type > 0) {
  94.  
  95.         // vendo se é batalha selvagem ou de domador
  96.         switch (data.current.battle_type) {
  97.             // caso seja contra monstro selvagem
  98.             case 1: {
  99.                 // enviar batalha
  100.                 this.sendWildBattle(data);
  101.                 break;
  102.             };
  103.             // caso seja contra domador (cpu)
  104.             case 2: {
  105.                 break;
  106.             };
  107.         };
  108.  
  109.         return;
  110.     };
  111.     // se estiver esperando uma luta selvagem
  112.     if (data.current.waiting_wild_battle > 0) {
  113.         this.sendWaitWildBattle(data, flag);
  114.         return;
  115.     };
  116.  
  117.     this.socket.emit("99", {
  118.         "state": 0,
  119.         "param": {
  120.             "monsters": data.monsters,
  121.             "position": {
  122.                 "x": data.map.pos_x,
  123.                 "y": data.map.pos_y,
  124.                 "facing": data.map.pos_facing,
  125.             },
  126.             "items": data.items,
  127.             "sprite": 1,
  128.             "map": data.map.map,
  129.             "flag": flag.value,
  130.             "battle": false
  131.         }
  132.     });
  133. };
  134.  
  135. // enviar informações de batalha com o monstro selvagem para o client
  136. Player.prototype.sendWildBattle = function (data) {
  137.  
  138.  
  139.     async.auto({
  140.         battle: next => {
  141.             this.db.mysql.query(
  142.                 "SELECT * FROM `battle` WHERE `uid` = '" + this.auth.uid + "'",
  143.                 (err, results, fields) => next(err, results[0])
  144.             );
  145.         },
  146.         // pegar infos do monstro selvagem
  147.         wild: next => {
  148.             this.db.mysql.query(
  149.                 "SELECT * FROM `monsters` WHERE `wild` = '1' AND `uid` = '" + this.auth.uid + "' AND `enabled` = '1'",
  150.                 (err, results, fields) => next(err, results[0])
  151.             );
  152.         },
  153.         buff_nerf: ["battle", (_data, next) => {
  154.             this.db.mysql.query(
  155.                 "SELECT * FROM `battle_buffs_nerfs` WHERE `battle_id` = '" + _data.battle.id + "'",
  156.                 (err, results) => {
  157.                     results = results || [];
  158.                     next(err, results);
  159.                 }
  160.             );
  161.         }]
  162.     }, (err, battle_data) => {
  163.         // seta buff e nerf
  164.         battle_data.battle.buff_nerf = battle_data.buff_nerf;
  165.         // manda infos da batalha pro client
  166.         this.socket.emit("99", {
  167.             state: 1,
  168.             param: {
  169.                 playerMonsters: data.monsters,
  170.                 battleInfo: battle_data.battle,
  171.                 wild: battle_data.wild,
  172.                 items: data.items
  173.             }
  174.         });
  175.  
  176.         // seta que jogador já viu a apresentação
  177.         this.db.mysql.query("UPDATE `battle` SET `seen_presentation` = '1' WHERE `uid` = '" + this.auth.uid + "'");
  178.  
  179.     });
  180. };
  181.  
  182. // enviar informações básicas + monstro selvagem que está esperando
  183. Player.prototype.sendWaitWildBattle = function (data, flag) {
  184.  
  185.     async.waterfall([
  186.         (next) => {
  187.             this.db.mysql.query(
  188.                 "SELECT * FROM `monsters` WHERE `wild` = '1' AND `uid` = '" + this.auth.uid + "' AND `enabled` = '1'",
  189.                 next
  190.             )
  191.         },
  192.         (results, fields) => {
  193.  
  194.             this.socket.emit("99", {
  195.                 state: 0,
  196.                 param: {
  197.                     monsters: data.monsters,
  198.                     position: {
  199.                         x: data.map.pos_x,
  200.                         y: data.map.pos_y,
  201.                         facing: data.map.pos_facing,
  202.                     },
  203.                     items: data.items,
  204.                     sprite: 1,
  205.                     map: data.map.map,
  206.                     flag: flag.value,
  207.                     wild: {
  208.                         id: results[0].monsterpedia_id,
  209.                         level: results[0].level
  210.                     },
  211.                     battle: false
  212.                 }
  213.             });
  214.         }
  215.     ])
  216. };
  217.  
  218. // pegar infos do jogador
  219. Player.prototype.getData = function () {
  220.  
  221.     async.parallel({
  222.         // pegar dados do mapa
  223.         map: (next) => {
  224.             this.db.mysql.query(
  225.                 "SELECT `pos_x`, `pos_y`, `pos_facing`, `map` FROM `map_position` WHERE `uid` = '" + this.auth.uid + "'",
  226.                 function (err, results, fields) {
  227.                     next(err, results[0]);
  228.                 }
  229.             )
  230.         },
  231.         // pegar flags do mapa
  232.         flags: (next) => {
  233.             this.db.mysql.query(
  234.                 "SELECT `flag_id`, `value` FROM `flags` WHERE `uid` = '" + this.auth.uid + "' AND `type` = 'm'",
  235.                 function(err, results, fields) {
  236.                     next(err, results);
  237.                 }
  238.             );
  239.         }
  240.     }, (err, data) => {
  241.  
  242.         var flag = _.findWhere(data.flags, {
  243.             flag_id: String(data.map.map)
  244.         });
  245.  
  246.         this.socket.emit("69", {
  247.             player: {
  248.                 sprite: 1,
  249.                 facing: data.map.pos_facing,
  250.                 x: data.map.pos_x,
  251.                 y: data.map.pos_y
  252.             },
  253.             map: data.map.map,
  254.             flag: flag.value,
  255.             needToReload: true
  256.         });
  257.     })
  258. };
  259.  
  260. Player.prototype.getItemsMonster = function (input) {
  261.  
  262.     var input = input || {};
  263.  
  264.     if ("monsters" in input) {
  265.         new Species(this.socket, this.auth, this.db)
  266.             .getMonstersInPocket((err, data) => {
  267.                 this.socket.emit("66", {
  268.                     type: 1,
  269.                     data
  270.                 });
  271.             });
  272.     };
  273.     if ("items" in input) {
  274.         new Bag(this.socket, this.auth, this.db)
  275.             .getItems((err, data) => {
  276.                 this.socket.emit("66", {
  277.                     type: 2,
  278.                     data
  279.                 });
  280.             });
  281.     };
  282. };
  283.  
  284.  
  285. module.exports = Player;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement