/누구 킬-데스-승률 표시
안녕하세요 천국입니다.
재가 예전에 총게임처럼 리니지에서도 킬뎃 을 넣어서 켈뎃 관리도 하고
그러면 더 케릭에 애정이 가지 않을까 하고 만들었던 소스인데 오즈님이 먼저 성공스샷란에
올리셨네요... 오즈님도 저랑 비슷한 생각으로 만드신것 같네요.
sunny님이 데스 올라 오게 하는것도 올리셨고..
그래서 재가 만든 킬뎃 전부 공개 해볼랍니다.
전 sunny님이랑은 좀 다르게 짜봤습니다.
MySqlCharacterStorage.java
일단 여기다 킬&데스를 저장시킬 필터를 잡아주고.
pc.setSealingPW(rs.getString("sealingPW")); //검색
pc.setKills(rs.getInt("PC_Kill")); //추가
pc.setDeaths(rs.getInt("PC_Death"));
pc.setDeaths(rs.getInt("PC_Death"));
public void storeCharacter(L1PcInstance pc) { // 검색
Connection con = null;
PreparedStatement pstm = null;
try {
int i = 0;
con = L1DatabaseFactory.getInstance().getConnection();
pstm = con
.prepareStatement("UPDATE characters SET level=?,HighLevel=?,Exp=?,MaxHp=?,CurHp=?,MaxMp=?,CurMp=?,Ac=?,Str=?,Con=?,Dex=?,Cha=?,Intel=?,Wis=?,Status=?,
Connection con = null;
PreparedStatement pstm = null;
try {
int i = 0;
con = L1DatabaseFactory.getInstance().getConnection();
pstm = con
.prepareStatement("UPDATE characters SET level=?,HighLevel=?,Exp=?,MaxHp=?,CurHp=?,MaxMp=?,CurMp=?,Ac=?,Str=?,Con=?,Dex=?,Cha=?,Intel=?,Wis=?,Status=?,
Class=?,Sex=?,Type=?,Heading=?,LocX=?,LocY=?,MapID=?,Food=?,Lawful=?,Title=?,ClanID=?,Clanname=?,ClanRank=?,
BonusStatus=?,ElixirStatus=?,ElfAttr=?,PKcount=?,ExpRes=?,PartnerID=?,AccessLevel=?,onlineStatus=?,HomeTownID=?,
Contribution=?,HellTime=?,Banned=?,Karma=?,LastPk=?,DeleteTime=?,sealingPW=?,lastactive=?,ain_zone=?,ain_point=?,
PC_Kill=?,PC_Death=? WHERE objid=?"); //빨간부분만 추가
pstm.setString(++i, pc.getSealingPW()); //검색
pstm.setInt(++i, pc.getKills());
pstm.setInt(++i, pc.getDeaths());
pstm.setInt(++i, pc.getId());
이제 필터를 잡아줬으니 나비켓에다가도 케릭터 테이블에 필터 설계를 해주시면 됩니다.
인트값에 길이는 10 디폴트 0 넣어주면 됩니다. 혹시 모르시는 분을위해 필터명은
PC_Kill , PC_Death 입니다.
L1Character.java
이제 kill&Death 의 필터를 만들었으니 케릭터에 저장할수 있게 메소드를 만들어
줍니다.
메소드이니 적당한 위치에 잘 넣어주시면 됩니다.
private int _Kills;
public int getKills() {
return _Kills;
}
return _Kills;
}
public void setKills(int Kills) {
_Kills = Kills;
}
private int _Deaths;
public int getDeaths() {
return _Deaths;
}
_Kills = Kills;
}
private int _Deaths;
public int getDeaths() {
return _Deaths;
}
public void setDeaths(int Deaths) {
_Deaths = Deaths;
}
_Deaths = Deaths;
}
L1Pcinstance.java
이제 필터도 만들었고 메소드도 만들었으니 피씨가 죽었을때 죽였을때 필터에
1씩 증가할수있게 명령어를 넣어주기만 하면끝.
위치는 옛날에 pc끼리 싸워서 이기는 맨트 그부분입니다.
if (newHp <= 0) { //검색
if (isGm() && getInventory().checkEquipped(300000)) {
setCurrentHp(getMaxHp());
} else {
death(attacker);
if (isGm() && getInventory().checkEquipped(300000)) {
setCurrentHp(getMaxHp());
} else {
death(attacker);
(이부분 교체 해주거나 아니면 필요한 부분만 빼다 넣으시면 됩니다.
if (getZoneType() == 0) { //만약 노멀존이 라면 (컴벳존에서 승작업 할것같에서.. 방지차원으로..)
if (attacker instanceof L1PcInstance) { //pvp시에만..
if (getLevel() >= 65) { //65랩 이상이라면..(저랩으로 승작업 할것같아서.. 방지차원으로..)
attacker.setKills(attacker.getKills()+1); //이긴넘 킬수 +1
setDeaths(getDeaths()+1); //진넘 데스수 +1
attacker.getInventory().storeItem(43012, 1); //이건 저희섭 pk승리의 조각 지급..다른분들 상금넣으셔도됨..
L1World.getInstance().broadcastPacketToAll(
new S_SystemMessage(attacker.getName() + "\\fW닝이 살인을 저질렀습니다. " + getName() + "\\fH님의 명복을 빕니다."));
} else { //65이하의 케릭을 죽였을시에는 멘트만 나가도록..
L1World.getInstance().broadcastPacketToAll(
new S_SystemMessage(attacker.getName() + "\\fW닝이 살인을 저질렀습니다. " + getName() + "\\fH님의 명복을 빕니다."));
}
}
}
}
}
if (getZoneType() == 0) { //만약 노멀존이 라면 (컴벳존에서 승작업 할것같에서.. 방지차원으로..)
if (attacker instanceof L1PcInstance) { //pvp시에만..
if (getLevel() >= 65) { //65랩 이상이라면..(저랩으로 승작업 할것같아서.. 방지차원으로..)
attacker.setKills(attacker.getKills()+1); //이긴넘 킬수 +1
setDeaths(getDeaths()+1); //진넘 데스수 +1
attacker.getInventory().storeItem(43012, 1); //이건 저희섭 pk승리의 조각 지급..다른분들 상금넣으셔도됨..
L1World.getInstance().broadcastPacketToAll(
new S_SystemMessage(attacker.getName() + "\\fW닝이 살인을 저질렀습니다. " + getName() + "\\fH님의 명복을 빕니다."));
} else { //65이하의 케릭을 죽였을시에는 멘트만 나가도록..
L1World.getInstance().broadcastPacketToAll(
new S_SystemMessage(attacker.getName() + "\\fW닝이 살인을 저질렀습니다. " + getName() + "\\fH님의 명복을 빕니다."));
}
}
}
}
}
S_WhoCharinfo.java
이제 킬 & 데스 를 /누구 쳤을때 나오게 해야됩니다.
보너스로 승률까지.....
float win = 0;
float lose = 0;
float total = 0;
float winner = 0;
float lose = 0;
float total = 0;
float winner = 0;
win = pc.getKills();
lose = pc.getDeaths();
total = win + lose;
winner = ((win * 100) / (total));
lose = pc.getDeaths();
total = win + lose;
winner = ((win * 100) / (total));
writeS(title + pc.getName() + " " + lawfulness + " " + clan + "\n\r"+"랩:"+pc.getLevel()+" /Kill:"+pc.getKills()+" /Death:"+pc.getDeaths()+" /승률:"+String.format("%.2f",winner)+"%입니다.");//Kill & Death 시스템 천국
(여기서 int문을 안쓰고 float문을 쓴이유는 int구문은 소수점을 다 자른답니다. 그래서 소수점 표기를 위해 float문 정수를 사용한겁니다. 그리고 ("%.2f",winner) 이부분의 2f 이부분이 소수점 2자리까지만 표기 한다는 겁니다. 3f하시면 3자리까지 표기 입니다)

로스트사가 님의 최근 댓글
감사합니다. 2019 06.13 감사합니다. 2019 06.12 감사합니다. 2019 05.03 감사합니다. 2019 05.03 감사합니다. 2018 03.11