📄 shenzhoucontroller.java
字号:
//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 + -