📄 shenzhoucontroller.java
字号:
package zsw_mmorpg.server.controller;import zsw_mmorpg.common.*;import zsw_mmorpg.log.zsw_out;import zsw_mmorpg.server.GameServer;import zsw_mmorpg.server.DBControl;import zsw_mmorpg.server.refresh_all_player;import java.util.*;/*** ShenzhouController.java** 服务器端游戏的引擎部分** @author <a href="mailto:shiwei@raymobile.com">朱世伟</a>* @version 1.0*/public class ShenzhouController extends GameController {/** 在线玩家哈希表 */protected Hashtable players;/** list of games */protected HashMap games;/**使用分割符得到的字符串的数量*/public static int token_num; //用来循环私聊防止空格之后没有了/** * return the gameName for this controller */public String getGameName() {return "RPS";}/** * 初始化引擎 */public void initController(GameConfig gc) { log.info("initController"); token_num = 0; players = new Hashtable(); Player p;// clients = new HashMap(); p = createPlayer(); p.setPlayerId("GM"); GameServer.addPlayer(p);// players.put(p.getPlayerId(),p); games = new HashMap(); refresh_all_player refresh_all_player = new refresh_all_player(players, this); refresh_all_player.start();// Item_use();}/** * 创建玩家 */public Player createPlayer() {PlayerDefault p = new PlayerDefault();p.setSessionId(gameServer.nextSessionId());return p;}/** * 创建游戏事件 */public GameEvent createGameEvent() {return new GameEventDefault();}/** * 事件处理机制 */public void processEvent(GameEvent e) {switch (e.getType()) {case GameEventDefault.C_LOGIN: //登陆 login(e); break;case GameEventDefault.C_LOGOUT: //登出 logout(e); break;//case GameEventDefault.C_JOIN_GAME: //1// join(e);// break;//case GameEventDefault.C_QUIT_GAME: //2// quit(e);// break;case GameEventDefault.C_CHAT_MSG: //聊天 chat(e); break;case GameEventDefault.C_CHAT_To_Player_MSG: //私聊 chat_to_player(e); break;case GameEventDefault.C_shop_buy: //buy Shop_buy(e); break;case GameEventDefault.C_shop_sell: //sell Shop_sell(e); break;case GameEventDefault.C_GET_PLAYERS: //玩家列表 getPlayers(e); break;case GameEventDefault.C_walk: //玩家走路 P_move(e); break;case GameEventDefault.C_War_win: //战斗胜利 P_war_win(e); break;case GameEventDefault.C_Distribute_Point: //分配技能点数 p_levelup_value_change(e); break;case GameEventDefault.C_Item_Action: //装备道具 P_item_equip(e); break;case GameEventDefault.C_item_un_equip: //装备卸载 Item_un_equip(e); break;case GameEventDefault.C_item_use: //使用道具 Item_use(e); break;case GameEventDefault.C_Friends_Add: //添加好友 ,最多20个,客户端判断提示 P_friends_add(e); break;case GameEventDefault.C_Friends_Del: //删除好友 P_friends_del(e); break;}}/** * 玩家登陆 */protected void login(GameEvent e) {//目前有同一用户登陆校验 String pid = e.getPlayerId(); String playerid_temp = null; String psd_temp = null; String psd_temp1 = null; int player_login_career; Vector vec = new Vector(); Vector vec1 = new Vector(); Player p = GameServer.getPlayerById(pid); if (p == null) { log.error("got login event for null player"); return; } if (p.getPlayer_logged()) //同玩家多连接 {// System.out.println("同玩家多连接"); GameEventDefault la = new GameEventDefault(GameEventDefault.S_P_already_login); sendEvent(la,GameServer.getPlayerById("GM")); //利用GM这个用户名给玩家返回错误// System.out.println("新连接发消息"); p.setPlayer_logged(false); //同玩家多连接关 return; } if(e.getMessage()!=null) { zsw_out.outdebug("p_login getmessage():"+e.getMessage()); String tokens[] = tokenizeString(e.getMessage()); playerid_temp = tokens[0]; psd_temp =tokens[1]; player_login_career = Integer.parseInt(tokens[2]); p.setPlayer_CareerId( player_login_career);/* if (p.loggedIn()) //已经登陆 { log.warn("got login event for already logged in player: " + pid);// zsw_out.outdebug(""+p.getPlayerId()+"已经登陆"); GameEventDefault la = new GameEventDefault(GameEventDefault.S_LOGIN_ACK_FAIL); sendEvent(la, p); return; } */ //查询数据库中该玩家的特定职业的信息 try { vec = DBControl.selectLine("SELECT * FROM character_1 " + "WHERE playerid='" + pid + "'"); } catch (Exception e1) { System.out.println("db error select pid:" + pid + " " + player_login_career); e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } if(!vec.isEmpty()) //数据库中有资料 {// for (int i =0;i < vec.size() ;i++) {// System.out.println("vec"+i+":"+vec.get(i));// } //负值 System.out.println("有资料"); p.setPlayer_C_life(Integer.parseInt((String)vec.get(2))); p.setPlayer_Max_life(Integer.parseInt((String)vec.get(3))); p.setPlayer_C_mp(Integer.parseInt((String)vec.get(4))); p.setPlayer_Max_mp(Integer.parseInt((String)vec.get(5))); p.setPlayer_strength(Integer.parseInt((String)vec.get(6))); p.setPlayer_celerity(Integer.parseInt((String)vec.get(7))); p.setPlayer_constitution(Integer.parseInt((String)vec.get(8))); p.setPlayer_wisdom(Integer.parseInt((String)vec.get(9))); p.setPlayer_level(Integer.parseInt((String)vec.get(10))); p.setPlayer_point(Integer.parseInt((String)vec.get(11))); p.setPlayer_map(Integer.parseInt((String)vec.get(12))); p.setPlayer_x(Integer.parseInt((String)vec.get(13))); p.setPlayer_y(Integer.parseInt((String)vec.get(14))); p.setPlayer_att(Integer.parseInt((String)vec.get(15))); p.setPlayer_att_wiz_mp(Integer.parseInt((String)vec.get(16))); p.setPlayer_def(Integer.parseInt((String)vec.get(17))); p.setPlayer_money(Integer.parseInt((String)vec.get(18))); p.setPlayer_exp(Integer.parseInt((String)vec.get(19))); p.setPlayer_item((String)vec.get(20)); //物品 p.setPlayer_friends((String)vec.get(21)); //friends psd_temp1=(String)vec.get(22); } else //没有数据则新建一个玩家 并保存 { System.out.println("没有资料"); PlayerDefault.new_player_by_career(p,player_login_career);// System.out.println("new_player_by_career()"); //保存进数据库 String sm; sm="insert character_1 (playerid,career,c_life," + "Max_life,c_mp,Max_mp,str,cel,con,wis,lev," + "point,map,x,y,attack,att_wiz_mp,def,money," + "exp,item,friends,psd) values ('" + playerid_temp+"',"+ player_login_career+","+ 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()+"','"+ p.getPlayer_friends()+"','"+ psd_temp+"')"; // "'"+ p.getPlayer_item()+"',"+ zsw_out.outdebug("insert sql language is :"+sm); try { DBControl.insert(sm); } catch (Exception e1) { e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } //p.setLoggedIn(true); // send ACK to player if ( (!vec.isEmpty()) && (!psd_temp.equals(psd_temp1)) ) { //密码不正确// GameEventDefault la = new GameEventDefault(GameEventDefault.S_Playerid_Psd_Not_Correct);// sendEvent(la, p);// System.out.println("密码不正确"); } else { //处理好友列表 String tokens1[] = tokenizeString(p.getPlayer_friends()); StringBuffer f1 =new StringBuffer(); StringBuffer f2 =new StringBuffer(); int f11 =0 , f22 =0; for (int i = 0; i < token_num; i++) { if( players.containsKey(tokens1[i])) { //online f1.append(tokens1[i]); f1.append(" "); f11++; } else { f2.append(tokens1[i]); f2.append(" "); f22++; } } //处理好友列表结束 //写一个玩家信息的数据包里面数据 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() +" " + f11 +" "+ f1.toString() +" "+ f22 +" "+ f2.toString() +" " ; zsw_out.outdebug("玩家登陆部分,server 返回给 CLIENT 玩家数据为"+mess); GameEventDefault la = new GameEventDefault(GameEventDefault.S_LOGIN_ACK_OK,mess); sendEvent(la, p); players.put(pid, 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 dis = new GameEventDefault(GameEventDefault.C_Friends_online,pid); sendEvent(dis, p1); } } // }// tell everyone this player is here// GameEventDefault sbl = new GameEventDefault(GameEventDefault.SB_LOGIN, p.getPlayerId());// sendBroadcastEvent(sbl, players.values());// add to our list//zsw_out.outdebug(pid +"登陆了");// send player list//getPlayers(e);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -