큐르님이 말씀하신 영웅시스템
위치 L1Model
L1Hero.java
package l1j.server.server.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import l1j.server.L1DatabaseFactory;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.utils.SQLUtil;
public class L1Hero {
private static L1Hero instance;
public static L1Hero getInstance() {
if (instance == null) {
instance = new L1Hero();
}
return instance;
}
private String knight = "";
private String wizard = "";
private String elf = "";
private String crown = "";
private String darkelf = "";
private String dragonknight = "";
private String illusionwizard = "";
public String getKnight() {
return knight;
}
public void setKnight(String knight) {
this.knight = knight;
}
public String getWizard() {
return wizard;
}
public void setWizard(String wizard) {
this.wizard = wizard;
}
public String getElf() {
return elf;
}
public void setElf(String elf) {
this.elf = elf;
}
public String getCrown() {
return crown;
}
public void setCrown(String crown) {
this.crown = crown;
}
public String getDarkelf() {
return darkelf;
}
public void setDarkelf(String darkelf) {
this.darkelf = darkelf;
}
public String getDragonknight() {
return dragonknight;
}
public void setDragonknight(String dragonknight) {
this.dragonknight = dragonknight;
}
public String getIllusionwizard() {
return illusionwizard;
}
public void setIllusionwizard(String illusionwizard) {
this.illusionwizard = illusionwizard;
}
public String title = "";
public boolean HeroCheck(L1PcInstance pc){
if(pc.isKnight() && pc.getName().equalsIgnoreCase(getKnight())){
title = "(검성)"; return true;
}else if(pc.isWizard() && pc.getName().equalsIgnoreCase(getWizard())){
title = "(현자)"; return true;
}else if(pc.isDarkelf()&& pc.getName().equalsIgnoreCase(getDarkelf())){
title = "(무영)"; return true;
}else if(pc.isDragonknight()&& pc.getName().equalsIgnoreCase(getDragonknight())){
title = "(용투사)"; return true;
}else if(pc.isElf()&& pc.getName().equalsIgnoreCase(getElf())){
title = "(신궁)"; return true;
}else if(pc.isIllusionist()&& pc.getName().equalsIgnoreCase(getIllusionwizard())){
title = "(극환)"; return true;
}else if(pc.isCrown()&& pc.getName().equalsIgnoreCase(getCrown())){
title = "(황제)"; return true;
}
return false;
}
public void HeroLoad(){
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try {
con = L1DatabaseFactory.getInstance().getConnection();
pstm = con
.prepareStatement("SELECT * FROM HeroTable");
rs = pstm.executeQuery();
while(rs.next()){
switch(rs.getInt("Class")){
case 1: setKnight(rs.getString("Name")); break;
case 2: setWizard(rs.getString("Name")); break;
case 3: setElf(rs.getString("Name")); break;
case 4: setCrown(rs.getString("Name")); break;
case 5: setDarkelf(rs.getString("Name")); break;
case 6: setDragonknight(rs.getString("Name")); break;
case 7: setIllusionwizard(rs.getString("Name")); break;
default:
System.out.println("테이블에 지정되지않은 클래스번호가있습니다."+rs.getInt("Class"));
break;
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
SQLUtil.close(rs);
SQLUtil.close(pstm);
SQLUtil.close(con);
}
HeroChange HC = new HeroChange();
Thread T1 = new Thread(HC);
T1.start();
}
public void HeroJoin(){
for(L1PcInstance pc : L1World.getInstance().getAllPlayers()){
if(HeroCheck(pc)){
pc.setName(title+pc.getName());
}
}
}
}
class HeroChange implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(true){
HeroChange();
Thread.sleep(3600000*12); //12시간 마다
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void HeroChange() {
L1Hero hero = L1Hero.getInstance();
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try {
con = L1DatabaseFactory.getInstance().getConnection();
pstm = con
.prepareStatement("SELECT * FROM characters where class = ? ordey by exp asc");
for(int i=1;i<8;i++){
pstm.clearParameters();
pstm.setString(1, Integer.toString(i)); //기사클래스번호
rs = pstm.executeQuery();
if(rs.next()){
switch(i){
case 1: hero.setKnight(rs.getString("Name")); break;
case 2: hero.setWizard(rs.getString("Name")); break;
case 3: hero.setElf(rs.getString("Name")); break;
case 4: hero.setCrown(rs.getString("Name")); break;
case 5: hero.setDarkelf(rs.getString("Name")); break;
case 6: hero.setDragonknight(rs.getString("Name")); break;
case 7: hero.setIllusionwizard(rs.getString("Name")); break;
default:
System.out.println("테이블에 지정되지않은 클래스번호가있습니다."+rs.getInt("Class"));
break;
}
}
}
HeroSave(); //저장
} catch (SQLException e) {
e.printStackTrace();
} finally {
SQLUtil.close(rs);
SQLUtil.close(pstm);
SQLUtil.close(con);
}
}
private void HeroSave(){
L1Hero hero = L1Hero.getInstance();
Connection con = null;
PreparedStatement pstm = null;
String name = "";
try {
con = L1DatabaseFactory.getInstance().getConnection();
pstm = con
.prepareStatement("Update heroTable set Name = ? where Class = ?");
for(int i=1;i<8;i++){
switch(i){
case 1: name = hero.getKnight(); break;
case 2: name = hero.getWizard(); break;
case 3: name = hero.getElf(); break;
case 4: name = hero.getCrown(); break;
case 5: name = hero.getDarkelf(); break;
case 6: name = hero.getDragonknight(); break;
case 7: name = hero.getIllusionwizard(); break;
}
pstm.clearParameters();
pstm.setString(1, Integer.toString(i)); //기사클래스번호
pstm.setString(2, name); //기사클래스번호
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
SQLUtil.close(pstm);
SQLUtil.close(con);
}
}
}
L1PcInstance.java
/**
*
* @param Hero
*/
private boolean isHero = false;
public boolean isHero() {
return isHero;
}
public void setHero(boolean isHero) {
this.isHero = isHero;
}
/** **/
DB부분
heroTable 생성
필드는
Class String not null
Name String not null
이거면 되겠죠? ㅎ
12시간마다 해당각 클래스의 exp를 비교해 제일 높은 각 클래스당
영웅칭호를 이름앞에 붙혀주는 소스입니다.
ㅎ
큐르님께바칩니다
[출처] 큐르님이 말씀하신 영웅시스템 (비공개 카페)

준희미니 님의 최근 댓글
rt 2021 05.25 ㄳ 2021 05.11 ㄳ 2021 05.11 rt 2021 05.09 rt 2021 04.25