사이트 로그인
2016.05.20 19:53
bph에
public byte[] S_Status(L1PcInstance cha, int type){
case 3: // Mr, Sp 설정
TeMp = writeC(Opcodes.S_OPCODE_CHANGE_MR_SP );
TeMp = writeC(0); // 현재 sp설정
TeMp = writeC(cha.get_Mr()); // 현재 Mr 설정
break;
//추가
==================================================================================================
l1캐릭터.
private int _TotalMr; // Mr 의 총 합계
public int get_TotalMr() {
return _Mr + _baseMr;
}
//제가 실험해본결과 마방적용할때 mr과 basemr을 따로이 인식을 하더군영.
//합께 인식하게 만들기 위해 get메소드만 주고 겟토탈mr로 모든 마방관련 데미지 or 확률 검사를 하면 될것 같네영.
아이템 mr+되는것. 아이템테이블에서 젤끝에 인첸트_mr 부분에 설정해놓으시면 됩니다.
==================================================================================================
l1아이템.java
private int enchantmr; // 마법 방어력 +
public int get_enchantmr(){
return enchantmr;
}public void set_enchantmr(int _enchantmr){
enchantmr = _enchantmr;
}
아이템테이블.java
private void allArmor(){
armor.set_EffectID(rs.getInt("effect_id"));
armor.set_enchantmr(rs.getInt("enchant_mr"));//추가.
armor.setIspiles(false);
_armors.put(new Integer(armor.getItemId()), armor);
==================================================================================================
BHP.java 입니다.
public byte[] S_TrageAddItem(L1ItemInstance temp, int count, int type){
생략
무기부분
if(temp.getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(temp.getItem().get_mr()+temp.getEnchantLevel()*temp.getItem().get_enchantmr()); //수정
}
방어구부분
if(temp.getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(temp.getItem().get_mr()+temp.getEnchantLevel()*temp.getItem().get_enchantmr()); //수정
}
==================================================================================================
item.java 입니다.
public byte[] S_InvList(L1PcInstance _cha){
if(temp[i].getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(temp[i].getItem().get_mr()+temp[i].getEnchantLevel()*temp[i].getItem().get_enchantmr());
}
if(temp[i].getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(temp[i].getItem().get_mr()+temp[i].getEnchantLevel()*temp[i].getItem().get_enchantmr());
}
public byte[] S_ItemAdd(L1PcInstance cha, L1ItemInstance item){
if(item.getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(item.getItem().get_mr()+item.getEnchantLevel()*item.getItem().get_enchantmr());
}
if(item.getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(item.getItem().get_mr()+item.getEnchantLevel()*item.getItem().get_enchantmr());
}
public byte[] ItemStatus(L1ItemInstance temp){
if(temp.getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(temp.getItem().get_mr()+temp.getEnchantLevel()*temp.getItem().get_enchantmr());
}
if(temp.getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(temp.getItem().get_mr()+temp.getEnchantLevel()*temp.getItem().get_enchantmr());
}
==================================================================================================
ItemHandler.java
public void op(L1PcInstance cha, L1ItemInstance item, boolean 체크){
무기 착용부분.
if(item.getItem().get_mr() > 0){
cha.set_Mr(cha.get_Mr() + item.getItem().get_mr() + (item.getEnchantLevel() * item.getItem().get_enchantmr()) );
}
방어구착용부분
if(item.getItem().get_mr() > 0){
cha.set_Mr(cha.get_Mr() + item.getItem().get_mr() + (item.getEnchantLevel() * item.getItem().get_enchantmr()) );
}
//교체.
무기해제부분.
if(item.getItem().get_mr() > 0){
cha.set_Mr(cha.get_Mr() - item.getItem().get_mr() - (item.getEnchantLevel() * item.getItem().get_enchantmr()) );
}
방어구해제부분.
if(item.getItem().get_mr() > 0){
cha.set_Mr(cha.get_Mr() - item.getItem().get_mr() - (item.getEnchantLevel() * item.getItem().get_enchantmr()) );
}
//교체.
==================================================================================================
Item.java
public byte[] S_InvList(L1PcInstance _cha){
if(temp[i].getItem().getType2() == temp[i].getItem().TYPE2_WEAPON){
if((temp[i].getItem().getType1() == temp[i].getItem().WEAPON_TOHANDSWORD) ||
(temp[i].getItem().getType1() == temp[i].getItem().WEAPON_BOW) ||
(temp[i].getItem().getType1() == temp[i].getItem().WEAPON_BLUNT) ||
생략
if(temp[i].getItem().getHitmodifier() > 0){
TeMp = writeC(5);
TeMp = writeC(temp[i].getItem().getHitmodifier());
}
if(temp[i].getItem().getDmgmodifer() > 0){
TeMp = writeC(6);
TeMp = writeC(temp[i].getItem().getDmgmodifer());
}
int sum = temp[i].getItem().get_darkelf() + temp[i].getItem().get_elf() + temp[i].getItem().get_knight() + temp[i].getItem().get_royal() + temp[i].getItem().get_mage();
if(sum > 0){
int darkelf = temp[i].getItem().get_darkelf() != 1 ? 0 : 16;
int elf = temp[i].getItem().get_elf() != 1 ? 0 : 4;
int royal = temp[i].getItem().get_royal() != 1 ? 0 : 1;
int mage = temp[i].getItem().get_mage() != 1 ? 0 : 8;
int knight = temp[i].getItem().get_knight() != 1 ? 0 : 2;
TeMp = writeC(7);
TeMp = writeC(darkelf + elf + royal + mage + knight);
}
if(temp[i].getItem().getAddstr() != 0){
TeMp = writeC(8);
TeMp = writeC(temp[i].getItem().getAddstr());
}
생략
}else if(temp[i].getItem().getType2() == temp[i].getItem().TYPE2_ARMOR){
생략
TeMp = writeC(사이즈(temp[i].getItem().getType2(), temp[i].getItem()));
TeMp = writeC(0x13);
TeMp = writeC(temp[i].getItem().get_ac());
TeMp = writeC(temp[i].getItem().get_material());
TeMp = writeD(temp[i].getItem().getWeight());
if(temp[i].getEnchantLevel() > 0){
TeMp = writeC(0x02);
TeMp = writeC(temp[i].getEnchantLevel());
}
int sum = temp[i].getItem().get_darkelf() + temp[i].getItem().get_elf() + temp[i].getItem().get_knight() + temp[i].getItem().get_royal() + temp[i].getItem().get_mage();
if(sum >0){
int darkelf = temp[i].getItem().get_darkelf() != 1 ? 0 : 16;
int elf = temp[i].getItem().get_elf() != 1 ? 0 : 4;
int royal = temp[i].getItem().get_royal() != 1 ? 0 : 1;
int mage = temp[i].getItem().get_mage() != 1 ? 0 : 8;
int knight = temp[i].getItem().get_knight() != 1 ? 0 : 2;
TeMp = writeC(7);
TeMp = writeC(darkelf + elf + royal + mage + knight);
}
if(temp[i].getItem().getAddstr() != 0){
TeMp = writeC(8);
TeMp = writeC(temp[i].getItem().getAddstr());
}
sum 부분은 착용시에 [왕자/공주][기사][요정][마법사][다크엘프] 나오게 하는것입니다.
본섭에서도 마법망토나 마법방어투구 같은 전클레스 착용 아이템에도 [왕자/공주][기사][요정][마법사][다크엘프]
이렇게 모든 문구가 표기됩니다.
==========================================================================================================
ItemUse.java 입니다.
case 39: // 젤1
if(temp2 != null){ // 아이템이 존재한다면
if(temp2.getItem().getType2() == temp2.getItem().TYPE2_ARMOR){ // 해당 아이템이 방어구라면
if(temp2.getItem().getIsenchant()){ // 인첸이 가능한 아이템이라면
cha.get_cil().CountItem(cha, temp, -1);
if(temp2.getEnchantLevel() < temp2.getItem().get_safenchant()){ // 인첸 가능 레벨보다 작다면
switch(temp.get_bress()){ // 축저주보통의 따라 인첸 하기
case 0: // 축
//[본섭화] 갑옷 마법 인첸트
if(temp2.getEnchantLevel() >= 0 && temp2.getEnchantLevel() <=5){// 갑옷 인첸트가 0 ~ 5 면
BressLv = cha.getRnd().nextInt(3)+1; // 1에서 3의 숫자 랜덤 선택
}else if(temp2.getEnchantLevel() == 6 ){ // 갑옷 인첸트가 6이면
BressLv = cha.getRnd().nextInt(2)+1; // 1에서 2의 숫자 랜덤 선택
}else if(temp2.getEnchantLevel() >= 7 ){ // 갑옷 인첸트가 7이상이면
BressLv =1;
}else{// 그외 갑옷 인첸트가 - 이면
BressLv = cha.getRnd().nextInt(3)+1; // 1에서 3의 숫자 랜덤 선택
}
//[본섭화] 갑옷 마법 인첸트
if(BressLv == 1){
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "+"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "파랗게", "한순간"), false);
}else{
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "+"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "파랗게", "잠시"), false);
}
temp2.setEnchantLevel(temp2.getEnchantLevel() + BressLv);
cha.sendPackets(cha.get_netConnection().bph().get_Item().ItemStatus(temp2), false);
break;
case 1: // 보통
if(temp2.getEnchantLevel() >= 0){ // 해당아이템 인첸레벨이 0 이상이라면
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "+"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "파랗게", "한순간"), false);
}else{ // 해당아이템 인첸레벨이 0 이하라면
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "-"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "파랗게", "한순간"), false);
}
temp2.setEnchantLevel(temp2.getEnchantLevel() + BressLv);
cha.sendPackets(cha.get_netConnection().bph().get_Item().ItemStatus(temp2), false);
break;
case 2: // 저주
if(temp2.getEnchantLevel() >= 0){ // 해당아이템 인첸레벨이 0 이상이라면
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "+"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "붉게", "한순간"), false);
}else{ // 해당아이템 인첸레벨이 0 이하라면
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "-"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "붉게", "한순간"), false);
}
temp2.setEnchantLevel(temp2.getEnchantLevel() - BressLv);
cha.sendPackets(cha.get_netConnection().bph().get_Item().ItemStatus(temp2), false);
BressLv = -1;
break;
}
if(temp2.isEquipped()){ // 해당 아이템 착용 중이라면
cha.set_Mr(cha.get_Mr() + (BressLv * temp2.getItem().get_enchantmr()) ); //추가
cha.set_ac(cha.get_ac() - BressLv);
cha.sendPackets(cha.get_netConnection().bph().S_Status(cha, 2), false);
cha.sendPackets(cha.get_netConnection().bph().S_Status(cha, 3), false); //추가
}
}else{ // 인첸 확율 적용 부분
if(temp.get_bress() < 2){ // 저주젤이 아니라면
int rnd = cha.getRnd().nextInt(100)+1;
//if(rnd<=((39-temp2.getEnchantLevel()))-(temp2.getEnchantLevel()/2)){ // 인첸 성공부분
if(rnd<=(GameServerSetting.getInstance().Rate_En)){ // 인첸 성공부분 게임서버 셋팅 적용
if(temp2.getEnchantLevel() >= 9) { //인챈레벨이 90이상 성공이라면 메세지출력
L1PcInstance[] players = L1World.getInstance().getAllPlayers();
for (int i = 0; i < players.length; i++){
players[i].sendPackets(players[i].get_netConnection().bph().get_cp().S_ChatPacket(players[i] , cha.get_name()+"님 +"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name()+" 러쉬! 성공~~!!", Opcodes.S_OPCODE_GLOBALCHAT , 0x02), true);
}
}//여기까지....메세지출력
switch(temp.get_bress()){ // 축저주보통의 따라 인첸 하기
case 0: // 축
//[본섭화] 갑옷 마법 인첸트
if(temp2.getEnchantLevel() >= 0 && temp2.getEnchantLevel() <=5){// 갑옷 인첸트가 0 ~ 5 면
BressLv = cha.getRnd().nextInt(3)+1; // 1에서 3의 숫자 랜덤 선택
}else if(temp2.getEnchantLevel() == 6 ){ // 갑옷 인첸트가 6이면
BressLv = cha.getRnd().nextInt(2)+1; // 1에서 2의 숫자 랜덤 선택
}else if(temp2.getEnchantLevel() >= 7 ){ // 갑옷 인첸트가 7이상이면
BressLv =1;
}else{// 그외 갑옷 인첸트가 - 이면
BressLv = cha.getRnd().nextInt(3)+1; // 1에서 3의 숫자 랜덤 선택
}
//[본섭화] 갑옷 마법 인첸트
if(BressLv == 1){
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "+"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "파랗게", "한순간"), false);
}else{
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "+"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "파랗게", "잠시"), false);
}
temp2.setEnchantLevel(temp2.getEnchantLevel() + BressLv);
cha.sendPackets(cha.get_netConnection().bph().get_Item().ItemStatus(temp2), false);
break;
case 1: // 보통
cha.sendPackets(cha.get_netConnection().bph().get_Message().S_ServerMessage(161, "+"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name(), "파랗게", "한순간"), false);
temp2.setEnchantLevel(temp2.getEnchantLevel() + BressLv);
cha.sendPackets(cha.get_netConnection().bph().get_Item().ItemStatus(temp2), false);
break;
}
if(temp2.isEquipped()){ // 해당 아이템 착용 중이라면
cha.set_Mr(cha.get_Mr() + (BressLv * temp2.getItem().get_enchantmr()) ); //추가
cha.set_ac(cha.get_ac() - BressLv);
cha.sendPackets(cha.get_netConnection().bph().S_Status(cha, 2), false);
cha.sendPackets(cha.get_netConnection().bph().S_Status(cha, 3), false); //추가
}
}else{ // 인첸 실패시
if(temp2.getEnchantLevel() >= 10) { //인챈레벨 10이상 실패시 메세지 출력
L1PcInstance[] players = L1World.getInstance().getAllPlayers();
for (int i = 0; i < players.length; i++){
players[i].sendPackets(players[i].get_netConnection().bph().get_cp().S_ChatPacket(players[i] , cha.get_name()+"님 +"+temp2.getEnchantLevel()+" "+temp2.getItem().get_name()+" 러쉬! 실패~~!!", Opcodes.S_OPCODE_GLOBALCHAT , 0x02), true);
}
}
if(temp2.isEquipped()){ // 해당 아이템 착용 중이라면
cha.set_Mr(cha.get_Mr()); // 착용후 러쉬실패시 마방 되돌리기
cha.set_ac(cha.get_ac() + (temp2.getItem().get_ac() + temp2.getEnchantLevel()));
cha.sendPackets(cha.get_netConnection().bph().S_Status(cha, 2), false);
ItemHandler.getInstance().op(cha, temp2, false);
switch(temp2.getItem().getType1()){
case 2:
cha.set_갑옷(false);
break;
case 10:
cha.set_망토(false);
if(cha.is_gmInvis()){ // 투망 상태중이라면
switch(cha.get_Setting()){ // 상태에따른 값 설정
case 6:
cha.set_Setting(4);
break;
case 22:
cha.set_Setting(20);
break;
}
cha.set_gmInvis(false);
cha.sendPackets(cha.get_netConnection().bph().S_Invisa(cha.get_objectId(), false), false);
for(int i=0 ; i<cha.getKnownPlayers().size() ; i++){
L1Object visible = (L1Object) cha.getKnownPlayers().get(i);
if(visible instanceof L1PcInstance){
L1PcInstance user = (L1PcInstance) visible;
user.sendPackets(user.get_netConnection().bph().S_Invisa(cha.get_objectId(), false), true);
}
}
}
break;
case 18:
cha.set_티셔츠(false);
break;
case 20:
cha.set_장갑(false);
break;
case 21:
cha.set_부츠(false);
break;
자 여기까지 하셨으면 착용후에 인첸트 올라가고 착용해제나 인첸 실패시 마방 수치가 잘 변화합니다.
마지막 옵션문제는 다음장으로~~~
이번엔 옵션 수정입니다. 최대 hp랑 mr 부분에서 바이트 수가 잘못 되있더라고요..
저만 그런게 아니고 거의 모든팩이이럴겁니다.
Item.java 입니다.
public byte[] S_InvList(L1PcInstance _cha){
public byte[] S_ItemAdd(L1PcInstance cha, L1ItemInstance item){
public byte[] ItemStatus(L1ItemInstance temp){
여기 세부분 다 고치세요.
if(temp[i].getItem().getAddhp() > 0){
TeMp = writeC(14);
TeMp = writeH(temp[i].getItem().getAddhp());
}
여기 보시면 빨강 부분 보이시죠? 저렇게 C를 H로 고쳐주세요~
if(temp[i].getItem().get_mr() > 0){
TeMp = writeC(15);
TeMp = writeH(temp[i].getItem().get_mr() + temp[i].getEnchantLevel() * temp[i].getItem().get_enchantmr());
}
여기도 확인해보시고 고치세요
shop.java랑 bph.java 도 똑같이 고치세요~~~
그다음중요한부분입니다.
public int 사이즈(int type, L1Item item){
이부분 보시면
case 1: // 무기 case 2: // 방어구 두군데 다를
if(sum > 0){
size += 2;
}
if(item.getAddhp() > 0){
size += 3;
}
if(item.get_mr() > 0){
size += 3;
}
위 부분과 똑같이 하세요~~ 너무 길어서 혹시나 제가 빠진게 잇나 모르겠네요. 확인해보시고 안된느거 말씀해보세요~
이제 모든게 끝입니다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | 소스자료는 직접 올려주세요 | 게임존 | 2017.06.06 | 550 |
209 | [요정]속성 마법에 의한 추가 데미지 | 연구사원 | 2016.06.07 | 94 |
208 | 특정지역 몬스터 아덴드랍율 높히기.txt [1] | 연구사원 | 2016.06.07 | 131 |
207 | NPC 호칭 달아주기 소스 | 연구사원 | 2016.06.07 | 74 |
206 | 환생 npc | LTE | 2016.06.06 | 136 |
205 | gm용 아이템 생성 npc [1] | LTE | 2016.06.06 | 212 |
204 | 워프 npc | LTE | 2016.06.06 | 58 |
203 | 성형 npc | LTE | 2016.06.06 | 67 |
202 | 수동 스킬마스터 | LTE | 2016.06.06 | 323 |
201 | 홍보코인 상점npc | LTE | 2016.06.06 | 131 |
200 | 자동전직 npc | LTE | 2016.06.06 | 108 |
199 | 개경소스 [1] | 연구사원 | 2016.06.03 | 344 |
198 | 공성전 군주지급템에 관한 소스 | 연구사원 | 2016.06.02 | 87 |
197 | 마방 및 마법데미지 본x화 [1] | 연구사원 | 2016.06.02 | 595 |
196 | 정확한 마방값을 불러오자 | 김닉넴 | 2016.05.20 | 196 |
195 | 버그사용자에게 몬스터가 말하기 | | 김닉넴 | 2016.05.20 | 163 |
194 | 윈성 용병대장에게서 폭풍의칼날단 받는소스 입니다 | 김닉넴 | 2016.05.20 | 89 |
193 | 빈주문서추가 | 김닉넴 | 2016.05.20 | 52 |
» | 마방이랑 옵션 완벽 적용 [1] | 김닉넴 | 2016.05.20 | 218 |
191 | 공성시간 자동 돌리기 | 김닉넴 | 2016.05.20 | 84 |
190 | 재질에 의한 타격치.. | 김닉넴 | 2016.05.20 | 58 |
189 | 헤이스트 아이템 헤이스트효과구현 | 김닉넴 | 2016.05.20 | 35 |
188 | 언데드계열 힐주기 | 김닉넴 | 2016.05.20 | 28 |
187 | 덱방을 알아보자.. | 김닉넴 | 2016.05.20 | 49 |
186 | 마법사_에볼 | 김닉넴 | 2016.05.20 | 70 |
185 | 마법서복권 | 김닉넴 | 2016.05.20 | 65 |
184 | 마법투구 헤이스트추가 | 김닉넴 | 2016.05.20 | 37 |
183 | 마수군왕의 징표함 적용 | 김닉넴 | 2016.05.20 | 31 |
182 | 만라우풀일때 아이템 안떨구기 | 김닉넴 | 2016.05.20 | 118 |
181 | 말하는 두루마리 무게버그수정.txt | 김닉넴 | 2016.05.20 | 50 |
180 | 몬스터 벽인식 | 김닉넴 | 2016.05.20 | 148 |
179 | 몹 HP게이지 만들기 [3] | 김닉넴 | 2016.05.20 | 185 |
178 | GM명령어 아크변신 | 김닉넴 | 2016.05.20 | 138 |
177 | 간단 낚시 버그 | 김닉넴 | 2016.05.20 | 173 |
176 | UI5 Key [출처] UI5 Key | 김닉넴 | 2016.05.20 | 31 |
175 | UI5 서버버전패킷 & 언노운 | 김닉넴 | 2016.05.20 | 51 |
174 | UI5 옵코드 | 김닉넴 | 2016.05.20 | 245 |
173 | 린드비오르 레이드 맵 / 확인불명 신규맵 | 김닉넴 | 2016.05.20 | 49 |
172 | 4.20일자 key 언노운 서버버전 옵코드 | 김닉넴 | 2016.05.20 | 150 |
171 | 신규 spr | 김닉넴 | 2016.05.20 | 194 |
170 | 두번째 인던맵 입니다 | 김닉넴 | 2016.05.20 | 77 |
169 | 인던 녹색 메세지 패킷 | 김닉넴 | 2016.05.20 | 29 |
168 | 이블 트릭.. 이블 리버스.. 소스(?) 일까나..ㅎㅎ | 김닉넴 | 2016.05.20 | 104 |
167 | A* 알고리즘 (몬스터 길찾기) | 김닉넴 | 2016.05.20 | 286 |
166 | [에바/일팩] * 귓속말 글자수 늘리는 방법 | 김닉넴 | 2016.05.20 | 23 |
165 | [에바/일팩] * 3.63혈맹창 리뉴얼 | 김닉넴 | 2016.05.20 | 59 |
164 | [점팩] * 드레이크인형 | 김닉넴 | 2016.05.20 | 55 |
163 | [에바/일팩] * 바운스헌터 및 신규변신 | 김닉넴 | 2016.05.20 | 83 |
162 | [에바/일팩] 스턴 확률조정법 | 김닉넴 | 2016.05.20 | 146 |
161 | [150811] Opcodes | 김닉넴 | 2016.05.20 | 402 |
160 | PK 승리시 깃털 뺏기 | 김닉넴 | 2016.05.20 | 59 |
확인은 못 해 봤지만 뭔가 굉장 함다..