• SEARCH

    통합검색
  • GAMEZONE
    • 커뮤니티
      • 공지사항
      • 유저게시판
        • 등업게시판
        • 출석체크
        • 정회원 무료자료실
      • 스크린샷
      • 인증자료실
    • 리니지
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 메이플스토리
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 바람의나라
      • 자유게시판
      • 홍보게시판
      • 자료게시판
        • 유틸자료실
        • 소스자료실
        • 클라이언트
        • 팩 자료실
      • 연구게시판
        • 개발내역
        • 질문과답변
        • 기타
      • 강의게시판
        • DR
        • CR
        • 구버전
        • 클라이언트 개조
        • 노하우 게시판
        • 게임공략 & 팁
    • 다크에덴
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 믹스마스터
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 라그나로크
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 기타게임
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 게임강의
    • 비베&포토샵
      • 자유게시판
      • 자료실
        • 일반자료실
        • 포인트 자료실
      • 노하우게시판
      • 포토샵게시판
    • 모바일
      • 게임공략
      • 포인트 자료실
      • 유틸자료실
      • 자유게시판
  • 메이플스토리 소스자료실
    • 메이플스토리 소스자료실 ()
    • (1.2.65) 미니게임 구현 소스

      • 피카츄염
      • 2018.02.02 - 16:07 149

    package server.shops;

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;

    import client.MapleCharacter;
    import client.MapleClient;
    import client.MapleQuestStatus;
    import constants.GameConstants;
    import server.quest.MapleQuest;
    import tools.packet.PlayerShopPacket;

    public class MapleMiniGame extends AbstractPlayerStore {

        private final static int slots = 2; //change?!
        private boolean[] exitAfter;
        private boolean[] ready;
        private int[] points;
        private int GameType = 0;
        private int[][] piece = new int[15][15];
        private List<Integer> matchcards = new ArrayList<Integer>();
        int loser = 0;
        int turn = 1;
        int piecetype = 0;
        int firstslot = 0;
        int tie = -1;

        public MapleMiniGame(MapleCharacter owner, int itemId, String description, String pass, int GameType) {
            super(owner, itemId, description, pass, slots - 1); //?
            this.GameType = GameType;
            this.points = new int[slots];
            this.exitAfter = new boolean[slots];
            this.ready = new boolean[slots];
            reset();
        }

        public void reset() {
            for (int i = 0; i < slots; i++) {
                points[i] = 0;
                exitAfter[i] = false;
                ready[i] = false;
            }
        }

        public void setFirstSlot(int type) {
            firstslot = type;
        }

        public int getFirstSlot() {
            return firstslot;
        }

        public void setPoints(int slot) {
            points[slot]++;
            checkWin();
        }

        public int getPoints() {
            int ret = 0;
            for (int i = 0; i < slots; i++) {
                ret += points[i];
            }
            return ret;
        }

        public void checkWin() {
            if (getPoints() >= getMatchesToWin() && !isOpen()) {
                int x = 0;
                int highest = 0;
                boolean tie = false;
                for (int i = 0; i < slots; i++) {
                    if (points[i] > highest) {
                        x = i;
                        highest = points[i];
                        tie = false;
                    } else if (points[i] == highest) {
                        tie = true;
                    }
                    points[i] = 0;
                }
                this.broadcastToVisitors(PlayerShopPacket.getMiniGameResult(this, tie ? 1 : 2, x));
                this.setLoser(x == 0 ? 1 : 0);
                this.setOpen(true);
                update();
                checkExitAfterGame();
            }
        }

        public int getOwnerPoints(int slot) {
            return points[slot];
        }

        public void setPieceType(int type) {
            piecetype = type;
        }

        public int getPieceType() {
            return piecetype;
        }

        public void setGameType() {
            if (GameType == 2) { //omok = 1
                matchcards.clear();
                for (int i = 0; i < getMatchesToWin(); i++) {
                    matchcards.add(i);
                    matchcards.add(i);
                }
            }
        }

        public void shuffleList() {
            if (GameType == 2) {
                Collections.shuffle(matchcards);
            } else {
                piece = new int[15][15];
            }
        }

        public int getCardId(int slot) {
            return matchcards.get(slot - 1);
        }

        public int getMatchesToWin() {
            return (getPieceType() == 0 ? 6 : (getPieceType() == 1 ? 10 : 15));
        }

        public void setLoser(int type) {
            loser = type;
        }

        public int getLoser() {
            return loser;
        }

        public void send(MapleClient c) {
            if (getMCOwner() == null) {
                closeShop(false, false, false);
                return;
            }
            c.getSession().write(PlayerShopPacket.getMiniGame(c, this));
        }

        public void setReady(int slot) {
            ready[slot] = !ready[slot];
        }

        public boolean isReady(int slot) {
            return ready[slot];
        }

        public void setPiece(int move1, int move2, int type, MapleCharacter chr) {
            if (piece[move1][move2] == 0 && !isOpen()) {
                piece[move1][move2] = type;
                this.broadcastToVisitors(PlayerShopPacket.getMiniGameMoveOmok(move1, move2, type));
                boolean found = false;
                for (int y = 0; y < 15; y++) {
                    for (int x = 0; x < 15; x++) {
                        if (!found && searchCombo(x, y, type)) {
                            this.broadcastToVisitors(PlayerShopPacket.getMiniGameResult(this, 2, getVisitorSlot(chr)));
                            this.setOpen(true);
                            update();
                            checkExitAfterGame();
                            found = true;
                        }
                    }
                }
                nextLoser();
            }
        }

        public void nextLoser() { //lol
            loser++;
            if (loser > slots - 1) {
                loser = 0;
            }
        }

        public void exit(MapleCharacter player) {
            if (player == null) {
                return;
            }
            player.setPlayerShop(null);
            if (isOwner(player)) {
                update();
                removeAllVisitors(3, 1);
            } else {
                removeVisitor(player, true);
            }
        }

        public boolean isExitAfter(MapleCharacter player) {
            if (getVisitorSlot(player) > -1) {
                return this.exitAfter[getVisitorSlot(player)];
            }
            return false;
        }

        public void setExitAfter(MapleCharacter player) {
            if (getVisitorSlot(player) > -1) {
                this.exitAfter[getVisitorSlot(player)] = !this.exitAfter[getVisitorSlot(player)];
            }
        }

        public void checkExitAfterGame() {
            for (int i = 0; i < slots; i++) {
                if (exitAfter[i]) {
                    exitAfter[i] = false;
                    //copied from PlayerInteractionHandler - EXIT
                    (i == 0 ? getMCOwner() : chrs[i - 1].get()).getClient().getSession().write(PlayerShopPacket.shopErrorMessage(0, i));
                    if (i == 0 && getShopType() != 1) {
                        closeShop(false, isAvailable(), false); //how to return the items?
                    } else {
                        (i == 0 ? getMCOwner() : chrs[i - 1].get()).setPlayerShop(null);
                        removeVisitor(chrs[i - 1].get(), true);
                    }
                }
            }
        }

        public boolean searchCombo(int x, int y, int type) {
            boolean ret = false;
            if (!ret && x < 11) {
                ret = true;
                for (int i = 0; i < 5; i++) {
                    if (piece[x + i][y] != type) {
                        ret = false;
                        break;
                    }
                }
            }
            if (!ret && y < 11) {
                ret = true;
                for (int i = 0; i < 5; i++) {
                    if (piece[x][y + i] != type) {
                        ret = false;
                        break;
                    }
                }
            }
            if (!ret && x < 11 && y < 11) {
                ret = true;
                for (int i = 0; i < 5; i++) {
                    if (piece[x + i][y + i] != type) {
                        ret = false;
                        break;
                    }
                }
            }
            if (!ret && x > 3 && y < 11) {
                ret = true;
                for (int i = 0; i < 5; i++) {
                    if (piece[x - i][y + i] != type) {
                        ret = false;
                        break;
                    }
                }
            }
            return ret;
        }

        public int getScore(MapleCharacter chr) {
            //TODO: Fix formula
            int score = 2000;
            int wins = getWins(chr);
            int ties = getTies(chr);
            int losses = getLosses(chr);
            if (wins + ties + losses > 0) {
                score += wins * 2;
                score += ties;
                score -= losses * 2;
            }
            return score;
        }

        @Override
        public byte getShopType() {
            return GameType == 1 ? IMaplePlayerShop.OMOK : IMaplePlayerShop.MATCH_CARD;
        }

        //questids:
        //omok - win = 122200
        //matchcard - win = 122210
        //TODO: record points
        public int getWins(MapleCharacter chr) {
            return Integer.parseInt(getData(chr).split(",")[2]);
        }

        public int getTies(MapleCharacter chr) {
            return Integer.parseInt(getData(chr).split(",")[1]);
        }

        public int getLosses(MapleCharacter chr) {
            return Integer.parseInt(getData(chr).split(",")[0]);
        }

        public void setPoints(int i, int type) { //lose = 0, tie = 1, win = 2
            MapleCharacter z;
            if (i == 0) {
                z = getMCOwner();
            } else {
                z = getVisitor(i - 1);
            }
            if (z != null) {
                String[] data = getData(z).split(",");
                data[type] = String.valueOf(Integer.parseInt(data[type]) + 1);
                StringBuilder newData = new StringBuilder();
                for (int s = 0; s < data.length; s++) {
                    newData.append(data[s]);
                    newData.append(",");
                }
                String newDat = newData.toString();
                z.getQuestNAdd(MapleQuest.getInstance(GameType == 1 ? GameConstants.OMOK_SCORE : GameConstants.MATCH_SCORE)).setCustomData(newDat.substring(0, newDat.length() - 1));
            }
        }

        public String getData(MapleCharacter chr) {
            MapleQuest quest = MapleQuest.getInstance(GameType == 1 ? GameConstants.OMOK_SCORE : GameConstants.MATCH_SCORE);
            MapleQuestStatus record;
            if (chr.getQuestNoAdd(quest) == null) {
                record = chr.getQuestNAdd(quest);
                record.setCustomData("0,0,0");
            } else {
                record = chr.getQuestNoAdd(quest);
                if (record.getCustomData() == null || record.getCustomData().length() < 5 || record.getCustomData().indexOf(",") == -1) {
                    record.setCustomData("0,0,0"); //refresh
                }
            }
            return record.getCustomData();
        }

        public int getRequestedTie() {
            return tie;
        }

        public void setRequestedTie(int t) {
            this.tie = t;
        }

        public int getTurn() {
            return turn;
        }

        public void setTurn(int t) {
            this.turn = t;
        }

        @Override
        public void closeShop(boolean s, boolean z, boolean f) {
            removeAllVisitors(3, 1);
            if (getMCOwner() != null) {
                getMCOwner().setPlayerShop(null);
            }
            update();
            getMap().removeMapObject(this);
        }

        @Override
        public void buy(MapleClient c, int z, short i) {
        }
    }

    이 게시물을..
    N
    0
    0
    • 1.2.65 아트 소스오빠는요
    • 0
      피카츄염

    피카츄염 님의 최근 글

    전용 접속기 제거 904 1 2018 02.12 (1.2.65) 특정IP 에서만 GM케릭터로 접속 가능하게 하기 181 2018 02.02 (1.2.65) 미니게임 구현 소스 149 2018 02.02 (1.2.65) 미네르바의 부엉이 소스 113 1 2018 02.02 아란콤보구현 112 2018 02.02

    피카츄염 님의 최근 댓글

    ㅋㅋ 2018 05.29 클라 안되는대ㅔ여 2018 02.16 감사합니다 2018 02.12 클라 보내주세요 go_to_r@naver.com 2018 02.09 ㄳ 2018 02.01
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • 1.2.65 아트 소스
    • 목록
      view_headline
    × CLOSE
    기본 (942) 제목 날짜 수정 조회 댓글 추천 비추
    분류 정렬 검색
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:13 926
    942
    v391 pack
    더기덕이 2025.10.04 - 00:33 203
    941
    127 써니 소스
    전창덕 2025.09.23 - 14:30 43
    940
    1.2.65 서버 ct및 우외 엔진
    마눙 2025.09.08 - 14:47 120
    939
    1.2.362 서버 src 입니
    GV솔그린 2024.03.21 - 20:54 313
    938
    1.2.316 초원팩 jdbc ssl 에러 수정 src
    GV솔그린 2024.03.21 - 19:31 115
    937
    1.2.329 로컬리디 언팩해서 만든 리디렉터
    GV솔그린 2024.03.21 - 19:24 91
    936
    1.2.329 로컬리디
    GV솔그린 2024.03.21 - 19:20 70
    935
    373 멀티로컬
    dreamin공유 2024.02.22 - 05:29 355
    934
    331팩 소스
    스마 2024.02.12 - 20:53 122
    933
    1.2.373 새벽소스
    스마 2024.02.12 - 20:47 242
    932
    373 솟
    garegdas 2024.02.06 - 09:24 121
    931
    스트레딧.
    하리86 2024.01.13 - 03:34 151
    930
    1.2.65 아르카나팩 스킬 변경 src
    김김김스 2023.12.26 - 04:49 948
    929
    316초원팩 src파일입니다
    동동쓰 2023.11.15 - 21:29 294
    928
    gms v111 접속rn
    하리86 2023.10.23 - 18:28 230
    927
    65버전 아르카나 , 죽둥젠 늘린거입니다
    gkxo9570 2023.09.22 - 12:38 542
    926
    65버전에서도 쓴 스크립트 강의모음
    gkxo9570 2023.09.22 - 07:42 460
    925
    1.2.65 화이트스타 src
    kingye 2023.07.04 - 10:56 1146
    924
    1.2.65 아르카나 src
    kingye 2023.07.04 - 07:28 535
    923
    ngs 우회
    우2우2 2023.06.08 - 04:55 277
    922
    몬스터 코드
    VanBan 2022.12.10 - 23:38 552
    921
    직업 코드
    VanBan 2022.12.10 - 23:30 306
    920
    362 자석펫 지급 NPC 스크립트
    나르나르 2022.11.10 - 08:55 854
    919
    0.83 src
    qweqwedq1 2022.07.13 - 15:30 144
    918
    리플렉스95 src
    qweqwedq1 2022.07.13 - 15:08 327
    917
    1.2.65 바콘팩
    dullggae 2021.07.30 - 18:04 730
    916
    316src입니다
    BJK 2021.02.10 - 05:37 218
    915
    331 소스
    라비앙로즈 2021.02.07 - 08:43 441
    914
    슈퍼엔진
    돼지우리 2021.01.14 - 02:20 445
    913
    kms 1.2.1104 ct입니다
    돼지우리 2021.01.12 - 12:07 448
    912
    어빌리티인포테이블.sql
    하리86 2020.12.16 - 00:23 180
    911
    잠재능력 관련 오류 수정 및 본섭화 옵션
    하리86 2020.12.16 - 00:16 358
    910
    sql 수정
    재희0414 2020.11.24 - 03:23 274
    909
    65 천외천 소스
    lIllIlllIllll 2020.10.16 - 06:05 412
    908
    로컬 소스
    피아쨩 2020.09.22 - 13:01 520
    907
    331 노엘팩 소스
    풍선씨 2020.09.09 - 03:33 1227
    906
    1.2.65 화이트스타 소스
    JYH93 2020.08.15 - 00:44 2343
    905
    1.2.65 순클 idb
    nhsnhsn 2020.07.24 - 00:19 875
    904
    331 GM명령어
    흐밍 2020.07.09 - 14:14 1837
    903
    레벨별 메소지급 소스
    능이 2020.07.05 - 21:44 690
    902
    1.2.284 그랜드 접속문제 해결파일
    wls 2020.06.28 - 07:30 240
    901
    대만 메이플스토리 113 아이템코드
    해우김123 2020.06.19 - 07:47 304
    900
    Java SE Development Kit 6 Update 10 - jdk-6u10
    수박씨 2020.05.12 - 21:52 203
    899
    Java SE Development Kit 6 Update 6 - jdk-6u6
    수박씨 2020.05.12 - 21:51 124
    898
    316 추옵 쿼리에서 수정하기
    DanielJSKim 2020.03.08 - 05:03 1440
    897
    316 추가옵션 구현 소스
    DanielJSKim 2020.03.08 - 05:00 1181
    896
    알면 유용한 위젯
    오빠는요 2020.02.25 - 21:06 754
    895
    1.2.65dk
    오빠는요 2020.02.25 - 21:04 481
    894
    1.2.65 아트 소스
    오빠는요 2020.02.25 - 21:02 459
    893
    316 이너 어빌리티 미개방 캐릭터에 강제로 부여하기
    DanielJSKim 2020.02.23 - 02:44 499
    • 1 2 3 4 5 6 7 8 9 10 .. 19
    • / 19 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay