미니게임 바카라 추가 소스
프리서버 오픈소스 리니지 미니게임 바카라 추가 소스
l1j.server.GameSystem.MiniGame 경로에 자바파일 추가
GTeventBakaraController.java
package l1j.server.GameSystem.MiniGame;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javolution.util.FastTable;
import l1j.server.server.GeneralThreadPool;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.serverpackets.S_ChatPacket;
import l1j.server.server.serverpackets.S_EffectLocation;
import l1j.server.server.serverpackets.S_Game_PetRacing;
import l1j.server.server.serverpackets.S_PacketBox;
import l1j.server.server.serverpackets.S_SystemMessage;
import l1j.server.server.utils.CommonUtil;
/** 미니 바카라 (개태) **/
public class GTeventBakaraController implements Runnable {
/** 로그 **/
private static Logger _log = Logger.getLogger(GTeventBakaraController.class.getName());
/** 게임오픈유무 **/
public boolean isgameStart = false;
/** 승리라인 지정 **/
public int bankerwin = 0;
public int playerwin = 0;
public int tiewin = 0;
/** 패선택 지정 **/
public int banker1 = 0;
public int banker2 = 0;
/** 게임상태 </br>
* 0대기 1오픈후모집 2배팅 3추첨 4종료 **/
public int Status = 0;
private final int 대기 = 0;
private final int 오픈후모집 = 1;
private final int 배팅 = 2;
private final int 추첨 = 3;
private final int 종료 = 4;
/** 싱글톤 인스텐스 **/
private static final GTeventBakaraController instance = new GTeventBakaraController();
public static GTeventBakaraController getInstance() {
return instance;
}
/** 게임 스타트 (쓰레드 시작) **/
public synchronized void start() {
if (isgameStart == false) {
isgameStart = true;
GeneralThreadPool.getInstance().execute(this);
} else {
System.out.println("미니바카라가 이미 실행중 입니다.");
}
}
@Override
public void run() {
try {
while (isgameStart) {
switch (Status) {
case 대기:
Thread.sleep(1000);
/** 오픈 가능한시간인지 체크 **/
startTimeChack();
/** 오픈이 아니면 컨티뉴 **/
if (isgameStart == false) {
continue;
}
Status = 오픈후모집;
break;
case 오픈후모집:
for (L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
if (pc != null) {
pc.bakara_Money = 0;
}
}
L1World.getInstance().broadcastPacketToAll(new S_PacketBox(S_PacketBox.GREEN_MESSAGE, "[미니 바카라]가 시작 되었습니다."));
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라]가 시작 되었습니다.");
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라] 뱅커,플레이어,타이 중 택1 가능");
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라] 2개 카드의 합이 9에 가까우면 승리.");
Thread.sleep(1000L * 5);
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라] 참가신청이 60초 남았습니다.");
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라] 참가 방법 : [ .참가 ]");
Thread.sleep(1000L * 30);
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라] 참가신청이 30초 남았습니다.");
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라] 참가 방법 : [ .참가 ]");
Thread.sleep(1000L * 30);
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라] 참가신청이 종료 되었습니다.");
Thread.sleep(1000L);
배팅설명();
Thread.sleep(5000L);
Status = 배팅;
break;
case 배팅:
배팅판보이기직전카운트(); //5 4 3 2 1 go
Thread.sleep(1000 * 5);
for (L1PcInstance pc : PlayMemberArray()) {
if (pc != null) {
pc.sendPackets(new S_SystemMessage("\\fW[미니 바카라] 배팅가능 시간이 60초 남았습니다."));
}
}
int i = 60;
while (i > 0) {
/** 멤버중 리스한유저 처리 **/
PlayMemberOutChack();
배팅판보여주기(0, i);
if (i == 30 || i == 20) {
/** 카운트 **/
CountDown(i);
} else if (i <= 10) {
/** 카운트 **/
CountDown(i);
}
Thread.sleep(1000);
i--;
}
for (L1PcInstance pc : PlayMemberArray()) {
if (pc != null) {
pc.sendPackets(new S_SystemMessage("\\fW[미니 바카라] 잠시후 추첨이 시작됩니다 !!!"));
}
}
Thread.sleep(1000);
Status = 추첨;
break;
case 추첨:
int k = 60;
while (k > 42) {
추첨안내(k);
배팅판보여주기(k, 0);
Thread.sleep(1000);
k--;
}
Thread.sleep(1000);
스코어비교();
Thread.sleep(1000 * 5);
Status = 종료;
break;
case 종료:
/** 게임종료 **/
clearGame();
Thread.sleep(1000 * 5);
L1World.getInstance().broadcastServerMessage("\\aH[미니 바카라] 게임종료 4시간후에 다시 오픈됩니다.");
L1World.getInstance().broadcastPacketToAll
(new S_PacketBox(S_PacketBox.GREEN_MESSAGE, "[미니 바카라] 게임종료 4시간후에 다시 오픈됩니다."));
Status = 대기;
break;
default:
Thread.sleep(1000L);
break;
}
}
} catch (Exception e) {
_log.log(Level.WARNING, "미니바카라에 예외 발생.", e);
}
}
/** 오픈 가능한시간인지 체크 **/
private void startTimeChack() {
Calendar cal = Calendar.getInstance();
int 분 = Calendar.MINUTE;
if (isgameStart == false) {
if ((cal.get(분) == 40)) { //매시간 40분마다 오픈
isgameStart = true;
System.out.println("미니바카라 오픈");
}
}
}
private void 배팅판보이기직전카운트() {
for (L1PcInstance pc : PlayMemberArray()) {
if (pc != null) {
pc.sendPackets(new S_PacketBox(S_PacketBox.MINIGAME_START_COUNT));
}
}
}
private void 배팅설명() {
for (L1PcInstance pc : PlayMemberArray()) {
if (pc != null) {
pc.sendPackets(new S_SystemMessage("\\fTBanker 또는 Player: [2배] , Tie(동점): [4배]"));
pc.sendPackets(new S_SystemMessage("\\fT2개 카드의 합이 9에 가까우면 승리 합니다."));
pc.sendPackets(new S_SystemMessage("\\fT합이 10이 넘어도 끝자리수만 비교 합니다."));
pc.sendPackets(new S_SystemMessage("\\fT--> .배팅 [뱅커 or 플레이어 or 타이] [1만~200만]"));
}
}
}
/** 멤버중 리스한유저 처리 **/
private void PlayMemberOutChack() {
if (playmember.size() > 0) {
for (L1PcInstance pc : PlayMemberArray()) {
if (pc == null) {
if (playmember.contains(pc)) {
playmember.remove(pc);
}
}
}
}
}
/** 카운트 **/
private void CountDown(int i) {
for (L1PcInstance pc : PlayMemberArray()) {
if (pc != null) {
pc.sendPackets(new S_SystemMessage("\\fW[미니 바카라] 배팅가능 시간이 " + i + "초 남았습니다."));
}
}
}
private void 추첨안내(int k) {
for (L1PcInstance pc : PlayMemberArray()) {
if (pc != null) {
if (k == 60) {
pc.sendPackets(new S_SystemMessage(" "));
pc.sendPackets(new S_SystemMessage("\\aH Banker(뱅커)에 원카드 돌립니다."));
} else if (k == 55) {
pc.sendPackets(new S_SystemMessage(" "));
pc.sendPackets(new S_SystemMessage("\\aH Player(플레이어)에 원카드 돌립니다."));
} else if (k == 50) {
pc.sendPackets(new S_SystemMessage(" "));
pc.sendPackets(new S_SystemMessage("\\aH Banker(뱅커)에 투카드 돌립니다."));
} else if (k == 45) {
pc.sendPackets(new S_SystemMessage(" "));
pc.sendPackets(new S_SystemMessage("\\aH Player(플레이어)에 투카드 돌립니다."));
} else if (k < 45) {
break;
}
}
}
}
private void 배팅판보여주기(int k, int i) {
int[] ran = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int selectBanker1 = CommonUtil.random(ran.length);
int selectBanker2 = CommonUtil.random(ran.length);
for (L1PcInstance pc : PlayMemberArray()) {
int selectPlayer = CommonUtil.random(ran.length);
if (pc != null) {
if (banker1 != 0 && banker2 != 0 && pc.bakara_Card1_player != 0 && pc.bakara_Card2_player != 0) {
pc.sendPackets(new S_SystemMessage("\\aH패돌리기가 끝났습니다. 스코어를 비교 합니다."));
break;
}
if (k == 59) {
banker1 = ran[selectBanker1];
} else if (k == 54) {
pc.bakara_Card1_player = ran[selectPlayer];
} else if (k == 49) {
banker2 = ran[selectBanker2];
} else if (k == 44) {
pc.bakara_Card2_player = ran[selectPlayer];
}
pc.sendPackets(new S_Game_PetRacing(pc, banker1, banker2, pc.bakara_Card1_player, pc.bakara_Card2_player, i, 0));
}
}
}
private void 스코어비교() {
int banktotal = banker1 + banker2;
if (banktotal >= 10) {
banktotal = banktotal - 10;
}
for (L1PcInstance pc : PlayMemberArray()) {
int rate = 0;
if (pc != null) {
int playertotal = pc.bakara_Card1_player + pc.bakara_Card2_player;
if (playertotal >= 10) {
playertotal = playertotal - 10;
}
if (banktotal > playertotal) {
bankerwin = 1;
pc.sendPackets(new S_ChatPacket("[ Banker(뱅커) ]가 승리 하였습니다."));
if (pc.bakara_Bat_banker != 0) {
rate = 2;
}
} else if (banktotal < playertotal) {
playerwin = 1;
pc.sendPackets(new S_ChatPacket("[ Player(플레이어) ]가 승리 하였습니다."));
if (pc.bakara_Bat_player != 0) {
rate = 2;
}
} else if (banktotal == playertotal) {
tiewin = 1;
pc.sendPackets(new S_ChatPacket("[ Tie(동점) ]이 승리 하였습니다."));
if (pc.bakara_Bat_tie != 0) {
rate = 4;
}
}
if (rate != 0) {
pc.sendPackets(new S_ChatPacket("You Win !!!!!! " + (pc.bakara_Money * rate) / 10000 + "만 아덴을 획득하였습니다."));
pc.getInventory().storeItem(40308, pc.bakara_Money * rate);
YouWin(pc);
rate = 0;
bankerwin = 0;
playerwin = 0;
tiewin = 0;
}
pc.sendPackets(new S_Game_PetRacing(pc, banker1, banker2, pc.bakara_Card1_player, pc.bakara_Card2_player, 0, 0));
}
}
}
/** 사용된정보 초기화 **/
private void clearGame() {
for (L1PcInstance pc : PlayMemberArray()) {
if (pc != null) {
pc.bakara_Money = 0;
pc.bakara_Bat_banker = 0;
pc.bakara_Bat_player = 0;
pc.bakara_Bat_tie = 0;
pc.bakara_Card1_player = 0;
pc.bakara_Card2_player = 0;
pc.sendPackets(new S_PacketBox(S_PacketBox.MINIGAME_END));
}
}
bankerwin = 0;
playerwin = 0;
tiewin = 0;
banker1 = 0;
banker2 = 0;
playmember.clear();
isgameStart = false;
}
/** 플레이멤버 리스트 **/
public final FastTable<L1PcInstance> playmember = new FastTable<L1PcInstance>();
private L1PcInstance[] PlayMemberArray() {
return playmember.toArray(new L1PcInstance[playmember.size()]);
}
private void YouWin(L1PcInstance pc) {
pc.sendPackets(new S_EffectLocation(pc.getX() + 3, pc.getY() + 2, 6424));
pc.sendPackets(new S_EffectLocation(pc.getX() + 2, pc.getY() + 1, 6419));
pc.sendPackets(new S_EffectLocation(pc.getX() + 1, pc.getY(), 6433));
pc.sendPackets(new S_EffectLocation(pc.getX() - 1, pc.getY() - 2, 6431));
pc.sendPackets(new S_EffectLocation(pc.getX() - 2, pc.getY() - 3, 6425));
pc.sendPackets(new S_EffectLocation(pc.getX() - 3, pc.getY() - 4, 6435));
}
}
=========================================================================================================
S_Game_PetRacing.java
/** 미니 바카라 (개태)**/
public S_Game_PetRacing(L1PcInstance pc, int num1, int num2, int num3, int num4, int time, int NoUse) {
GTeventBakaraController gt = GTeventBakaraController.getInstance();
int banktotal = gt.banker1 + gt.banker2;
int playertotal = pc.bakara_Card1_player + pc.bakara_Card2_player;
if (banktotal >= 10) {
banktotal = banktotal - 10;
}
if (playertotal >= 10) {
playertotal = playertotal - 10;
}
writeC(Opcodes.S_OPCODE_PACKETBOX);
writeC(0x42);
writeH(30);// 참여자수
writeH(31); // 등수
writeS(" ");
writeS(" Banker");
if (gt.playerwin == 0 && gt.bankerwin == 0) {
writeS(" ");
} else if (gt.bankerwin > 0) {
writeS(" \\aD[Win = " + banktotal + "]");
} else {
writeS(" \\aH[Lose = " + banktotal + "]");
}
writeS(" ");
writeS("\\aG " + getBakaraNum(num1, 0) + " \\aD " + getBakaraNum(num2, 0) + " ");
writeS("\\aG " + getBakaraNum(num1, 1) + " \\aD " + getBakaraNum(num2, 1) + " ");
writeS("\\aG " + getBakaraNum(num1, 2) + " \\aD " + getBakaraNum(num2, 2) + " ");
writeS("\\aG " + getBakaraNum(num1, 3) + " \\aD " + getBakaraNum(num2, 3) + " ");
writeS("\\aG " + getBakaraNum(num1, 4) + " \\aD " + getBakaraNum(num2, 4) + " ");
writeS(" ");
writeS("\\aL-------------------");
writeS(" Tie");
if (gt.tiewin > 0) {
writeS("\\aD[ Banker = Player ]");
} else {
writeS(" ");
}
writeS(" ");
writeS("\\aL-------------------");
writeS(" Player");
if (gt.playerwin == 0 && gt.bankerwin == 0) {
writeS(" ");
} else if (gt.playerwin > 0) {
writeS(" \\aD[Win = " + playertotal + "]");
} else {
writeS(" \\aH[Lose = " + playertotal + "]");
}
writeS(" ");
writeS("\\aG " + getBakaraNum(num3, 0) + " \\aD " + getBakaraNum(num4, 0) + " ");
writeS("\\aG " + getBakaraNum(num3, 1) + " \\aD " + getBakaraNum(num4, 1) + " ");
writeS("\\aG " + getBakaraNum(num3, 2) + " \\aD " + getBakaraNum(num4, 2) + " ");
writeS("\\aG " + getBakaraNum(num3, 3) + " \\aD " + getBakaraNum(num4, 3) + " ");
writeS("\\aG " + getBakaraNum(num3, 4) + " \\aD " + getBakaraNum(num4, 4) + " ");
writeS(" ");
writeS("\\aL-------------------");
writeS(" ");
if (gt.Status == 2) {
writeS("\\aD배팅시간 : " + time + "초");
} else if (gt.Status == 3) {
writeS("\\aD 배 팅 종 료 !");
}
writeS(" ");
if (pc.bakara_Bat_banker > 0) {
writeS("내선택 : [Banker]");
writeS("배당률 : [ 2배 ]");
} else if (pc.bakara_Bat_player > 0) {
writeS("내선택 : [Player]");
writeS("배당률 : [ 2배 ]");
} else if (pc.bakara_Bat_tie > 0) {
writeS("내선택 : [Tie]");
writeS("배당률 : [ 4배 ]");
} else {
writeS("내선택 : ");
writeS("배당률 : ");
}
writeS(" ");
}
private String getBakaraNum(int num, int Line) {
return numList[Line][num];
}
String[][] numList = {
{ " ", " $$ ", "$$$$$", "$$$$$", "$ $ ", "$$$$$", "$$$$$", "$$$$$", "$$$$$", "$$$$$" },
{ " ", " $ ", " $", " $", "$ $ ", "$ ", "$ ", "$ $", "$ $", "$ $" },
{ " ", " $ ", "$$$$$", "$$$$$", "$$$$$", "$$$$$", "$$$$$", " $", "$$$$$", "$$$$$" },
{ " ", " $ ", "$ ", " $", " $ ", " $", "$ $", " $", "$ $", " $" },
{ " ", " $$$ ", "$$$$$", "$$$$$", " $ ", "$$$$$", "$$$$$", " $", "$$$$$", "$$$$$" },
};
/** **/
====================================================================================================
L1Pcinstance.java
/** 미니 바카라 관련 **/
public int bakara_Money = 0;
public int bakara_Bat_banker = 0;
public int bakara_Bat_player = 0;
public int bakara_Bat_tie = 0;
public int bakara_Card1_player = 0;
public int bakara_Card2_player = 0;
/** **/
=========================================================================================================
명령어는 참가/배팅 2종류 만드시면 됨

찰떡01 님의 최근 댓글
ㄳ 2023 06.17 ㄱㅅ 2020 12.19 클라 공유 부탁드립니다. 2020 12.19 ㄱㅅ 2020 11.26 ㄱㅅ 2020 11.05