⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shenzhoucontroller.java

📁 一个MMORPG手机游戏的服务器端程序源代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
//zsw_out.outdebug("login, player: " + pid + ", players online: " + players.size());//zsw_out.outdebug("career:"+p.getPlayer_CareerId()+ "level:" +p.getPlayer_level() +"map:"+p.getPlayer_map());}else{       //数据包错误        zsw_out.out("login message is null.");        GameEventDefault la = new GameEventDefault(GameEventDefault.S_LOGIN_ACK_FAIL);        sendEvent(la, p);}}/** * 玩家登出 */protected void logout(GameEvent e) {String pid = e.getPlayerId();    Vector vec1 = new Vector();Player p = (Player) players.get(pid);    // remove the player    if(pid!=null)    {    p_save_this_player(p);      //下线保存玩家信息    players.remove(pid);    }    System.out.println(pid+" is  logout! ");// if in game, kill it first//    if (p.inGame()) {//        quit(e);//    }// send them a disconnectGameEventDefault dis = new GameEventDefault(GameEventDefault.S_DISCONNECT, "logged out");sendEvent(dis, p);    //告诉其它把你加为好友的人,你离线了    try {        vec1 = DBControl.selectRow("SELECT initiative FROM friend_notice " +                "WHERE negative='" + pid + "'");    } catch (Exception e1) {        System.out.println("db error select friend_notice  pid:" + pid + "  "+" 下线提示");        e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.    }  if(!vec1.isEmpty()) //数据库中有资料  {      for (int i=0; i< vec1.size(); i++) {          Player p1 = (Player) players.get(vec1.get(i));          GameEventDefault dd = new GameEventDefault(GameEventDefault.C_Friends_offline,pid);          sendEvent(dd, p1);      }  }        GameServer.removePlayer(p);//    // tell everyone else//    GameEventDefault sbl = new GameEventDefault(GameEventDefault.SB_LOGOUT, p.getPlayerId());//    sendBroadcastEvent(sbl, players.values());//    log.info("logout, player: " + pid + ", players online: " + players.size());}/** * 公聊 */protected void chat(GameEvent e) {    StringBuffer sb;    sb = new StringBuffer();    sb.append(e.getPlayerId());    sb.append(": ");    sb.append(e.getMessage());    e.setMessage(sb.toString());    e.setType(GameEventDefault.SB_CHAT_MSG);    sendBroadcastEvent(e, players.values());    zsw_out.outdebug("chat, player " + e.getPlayerId() + " says " + e.getMessage());//    String pid = e.getPlayerId();//    Player p = GameServer.getPlayerById(pid);//    GameEventDefault pll = new GameEventDefault(GameEventDefault.SB_CHAT_MSG, e.getMessage());//    sendEvent(pll, p);} /** * 秘密聊天,呼叫某玩家,和某玩家单独聊天 */protected void chat_to_player(GameEvent e) {    StringBuffer sb;    String chat_to_player;    sb = new StringBuffer();    sb.append(e.getPlayerId());    sb.append(" ");    sb.append(e.getPlayerId());    sb.append("说:");//    sb.append(e.getMessage());//    e.setMessage(sb.toString());     String pid = e.getPlayerId();     Player p = GameServer.getPlayerById(pid);     if (p == null) {         System.out.println("got login event for null player");            return;     }     if(e.getMessage()!=null)     {         String tokens[] = tokenizeString(e.getMessage());         chat_to_player = tokens[0];            for (int i =0;i < token_num ;i++) {         //防止玩家输入空格而导致后面的话没有了                sb.append(tokens[i]);               }      if(players.containsKey(chat_to_player))         //要发送的玩家在线      {         GameEventDefault pll = new GameEventDefault(GameEventDefault.C_CHAT_To_Player_MSG, sb.toString());         sendEvent(pll, p);         p = GameServer.getPlayerById(chat_to_player);         sendEvent(pll, p);                       //发给接收者         zsw_out.outdebug("私聊 player " + e.getPlayerId() + " says " + sb.toString());      }else      {          StringBuffer ss= new StringBuffer();          ss.append(chat_to_player);          ss.append("目前不在线。");          GameEventDefault pll = new GameEventDefault(GameEventDefault.C_CHAT_To_Player_MSG,ss.toString());          sendEvent(pll, p);      }     }//    e.setType(GameEventDefault.C_CHAT_To_Player_MSG);//    sendBroadcastEvent(e, players.values());} /** * 玩家列表 */protected void getPlayers(GameEvent e){String pid = e.getPlayerId();Player p = (Player) players.get(pid);StringBuffer sb = new StringBuffer();sb.append("players online:\n");Iterator i = players.values().iterator();while(i.hasNext()) {    Player p2 = (Player) i.next();        sb.append(p2.getPlayerId());        sb.append("\n");}GameEventDefault pl = new GameEventDefault(GameEventDefault.S_GET_PLAYERS, sb.toString());sendEvent(pl, p);}/**玩家移动*/protected void P_move(GameEvent e)    {    int step = 0;    String pid = e.getPlayerId();    Player p = GameServer.getPlayerById(pid);    if (p == null) {        System.out.println("got login event for null player");            return;    }    if(e.getMessage()!=null)    {    zsw_out.outdebug("p_move getmessage():"+e.getMessage());    String tokens[] = tokenizeString(e.getMessage());    p.setPlayer_map(Integer.parseInt(tokens[0]));        //以后加职业    p.setPlayer_x(Integer.parseInt(tokens[1]));    p.setPlayer_y(Integer.parseInt(tokens[2]));    p.setPlayer_direction(Integer.parseInt(tokens[3]));    step =  Integer.parseInt(tokens[4]);    p.setPlayer_step_count(step);    if (step!=0)       p.setPlayer_d1(Integer.parseInt(tokens[5]));    System.out.println("career:"+p.getPlayer_CareerId()+ "level:" +p.getPlayer_level() +"map:"+p.getPlayer_map());    System.out.println("x:" +p.getPlayer_x() +"y:"+p.getPlayer_y());    System.out.println("getPlayer_direction:"+p.getPlayer_direction()+"getPlayer_step_count:"+p.getPlayer_step_count());    System.out.println("d1:"+p.getPlayer_d1());    /**遍历该地图所有玩家*/    StringBuffer sb = null;    try {        Iterator ii = players.values().iterator();        int p_move_sum = 0 ;        while (ii.hasNext()) {            Player p3 = (Player) ii.next();                if(p3.getPlayer_map()==p.getPlayer_map())                 p_move_sum++;        }        sb = new StringBuffer();        sb.append(p_move_sum-1);        sb.append(" ");    } catch (Exception e1) {        e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.    }    try {        Iterator i = players.values().iterator();        while (i.hasNext()) {            Player p2 = (Player) i.next();            if((p2.getPlayer_map()==p.getPlayer_map()) &&                            (!p2.getPlayerId().equals(p.getPlayerId())))//如果在同一个地图上的话            {                sb.append(p2.getPlayerId());                sb.append(" ");                sb.append(p2.getPlayer_CareerId());                sb.append(" ");                sb.append(p2.getPlayer_x());   //注意:这里是整数加入了buffer                sb.append(" ");                sb.append(p2.getPlayer_y());   //读使用String.valueOf(int)                sb.append(" ");                sb.append(p2.getPlayer_direction());   //注意:这里是整数加入了buffer                sb.append(" ");                sb.append(p2.getPlayer_step_count());   //读使用String.valueOf(int)                sb.append(" ");                if(p2.getPlayer_step_count()!=0)                {                sb.append(p2.getPlayer_d1());   //注意:这里是整数加入了buffer                sb.append(" ");                }            }        }    } catch (Exception e1) {        e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.    }    zsw_out.outdebug("send orther players:"+sb);    GameEventDefault pl = new GameEventDefault(GameEventDefault.C_walk, sb.toString());    sendEvent(pl, p);}}/**玩家战斗胜利处理*/protected void P_war_win(GameEvent e)    {    int exp_temp = 0,lev_temp =0,mes_temp=0,money_temp=0,point_temp=0,level_up=0,cel_temp=0;    String pid = e.getPlayerId();    Player p = GameServer.getPlayerById(pid);    if (p == null) {        log.error("got login event for null player");        return;    }    if(e.getMessage()!=null)    {    zsw_out.outdebug("p_war_win getmessage():"+e.getMessage());    mes_temp =Integer.parseInt(e.getMessage());//    String tokens[] = tokenizeString(e.getMessage());    money_temp=p.getPlayer_money();    exp_temp=p.getPlayer_exp();    lev_temp=p.getPlayer_level();    p.setPlayer_money(mes_temp + money_temp);                   //都是加上的        if (exp_temp< 810000) {            p.setPlayer_exp(mes_temp + exp_temp);              //大于这个数就不在加经验了        }       StringBuffer ms = new StringBuffer();          ms.append(p.getPlayer_money());          ms.append(" ");          ms.append(p.getPlayer_exp());          ms.append(" ");    if(p.getPlayer_exp() > PlayerDefault.level_up[lev_temp])          //升级    {        if(lev_temp<40)              //40级也不加经验了        {       //level up            p.setPlayer_level(lev_temp+1);            //告诉客户端升级了  ,并给他相应的技能点数            point_temp = p.getPlayer_point();            p.setPlayer_point(point_temp + 10);            if(p.getPlayer_CareerId() == PlayerDefault.P_Career_hunter)            {                cel_temp = p.getPlayer_celerity();                p.setPlayer_celerity(cel_temp + 1);         //弓箭手加1点敏捷            }            level_up =1;//            ms.append(p.getPlayer_point());//            ms.append(" ");//             System.out.println("玩家升级了,server 返回给  CLIENT 玩家数据为"+ms.toString());//             GameEventDefault la = new GameEventDefault(GameEventDefault.S_Playerid_level_up,ms.toString());//             sendEvent(la, p);        }    }        ms.append(level_up);        ms.append(" ");        GameEventDefault lla = new GameEventDefault(GameEventDefault.C_War_win, ms.toString());        sendEvent(lla, p);        zsw_out.outdebug("war win mes " + ms);        p_save_this_player(p);//        System.out.println("career:"+p.getPlayer_CareerId()+ "level:" +p.getPlayer_level() +"map:"+p.getPlayer_map());//        System.out.println("x:" +p.getPlayer_x() +"y:"+p.getPlayer_y());    }}/** 玩家升级属性变化之点数分配 */protected  void p_levelup_value_change(GameEvent e) {        int life_temp = 0, mp_temp = 0, str_temp = 0, cel_temp = 0;        int con_temp = 0, wis_temp = 0, sum_temp=0 ,point_temp =0 ;        String pid = e.getPlayerId();        Player p = GameServer.getPlayerById(pid);        if (p == null) {            log.error("got login event for null player");            return;        }        if(e.getMessage()!=null)        {                point_temp= p.getPlayer_point();      //玩家的点数                String tokens[] = tokenizeString(e.getMessage());                str_temp = Integer.parseInt(tokens[0])  ;                cel_temp = Integer.parseInt(tokens[1])  ;                con_temp = Integer.parseInt(tokens[2])  ;                wis_temp = Integer.parseInt(tokens[3])  ;            sum_temp = str_temp + cel_temp + con_temp + wis_temp;  //该次分配的点数之和            if ( point_temp >= sum_temp ) {                  //点数的影响                     p_point_value_change(p,str_temp,cel_temp,con_temp,wis_temp,p.getPlayer_CareerId());                  //玩家点数剩余                p.setPlayer_point( point_temp - sum_temp );                String mess =    p.getPlayer_C_life()+" "+                        p.getPlayer_Max_life()+" "+                        p.getPlayer_C_mp()+" "+                        p.getPlayer_Max_mp()+" "+                        p.getPlayer_strength()+" "+                        p.getPlayer_celerity()+" "+                        p.getPlayer_constitution()+" "+                        p.getPlayer_wisdom()+" "+                        p.getPlayer_level()+" "+                        p.getPlayer_point()+" "+                        p.getPlayer_map()+" "+                        p.getPlayer_x()+" "+                        p.getPlayer_y()+" "+                        p.getPlayer_att()+" "+                        p.getPlayer_att_wiz_mp()+" "+                        p.getPlayer_def()+" "+                        p.getPlayer_money()+" "+                        p.getPlayer_exp() +" "+                        p.getPlayer_item() +" "         ;                System.out.println("玩家分配点数完毕,server --》 CLIENT 数据为"+mess);                GameEventDefault la = new GameEventDefault(GameEventDefault.C_Distribute_Point,mess);                sendEvent(la, p);                //save                 p_save_this_player(p);            }            else                zsw_out.outdebug("玩家 "+p.getPlayerId()+" 分配点数错误");        }//    life_temp = p.getPlayer_Max_life();//    mp_temp = p.getPlayer_Max_mp();//    if (p.getPlayer_CareerId() == PlayerDefault.P_Career_warrior) {//        p.setPlayer_Max_life(life_temp + 20);//        p.setPlayer_Max_mp(mp_temp + 6);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -