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

📄 shenzhoucontroller.java

📁 一个MMORPG手机游戏的服务器端程序源代码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
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 + -