Fixed quest rewarding + Lethal attacks in Dojo

Fixed quests not giving items in some cases, lethal damages rendering
dojo uncompletable and added new scripts.
This commit is contained in:
ronancpl
2017-04-07 21:42:42 -03:00
parent f6935d3d3b
commit c8f905e1a5
23 changed files with 7503 additions and 6922 deletions

View File

@@ -178,14 +178,29 @@ public class ItemAction extends MapleQuestAction {
if (item.getGender() != 2 && item.getGender() != chr.getGender()) {
return false;
}
if(item.getJob() != -1) {
if (item.getJob() != chr.getJob().getId()) {
return false;
} else if (MapleJob.getBy5ByteEncoding(item.getJob()).getId() / 100 != chr.getJob().getId() / 100) {
return false;
}
}
if (item.job > 0) {
final List<Integer> code = getJobBy5ByteEncoding(item.getJob());
boolean jobFound = false;
for (int codec : code) {
if (codec / 100 == chr.getJob().getId() / 100) {
jobFound = true;
break;
}
}
/*
if (!jobFound && item.jobEx > 0) {
final List<Integer> codeEx = getJobBySimpleEncoding(item.jobEx);
for (int codec : codeEx) {
if ((codec / 100 % 10) == (chr.getJob().getId() / 100 % 10)) {
jobFound = true;
break;
}
}
}
*/
return jobFound;
}
return true;
}

View File

@@ -11,6 +11,9 @@ import provider.MapleData;
import server.quest.MapleQuest;
import server.quest.MapleQuestActionType;
import java.util.List;
import java.util.ArrayList;
/**
*
* @author Tyler (Twdtwd)
@@ -34,6 +37,86 @@ public abstract class MapleQuestAction {
}
public MapleQuestActionType getType() {
return type;
}
return type;
}
public static List<Integer> getJobBy5ByteEncoding(int encoded) {
List<Integer> ret = new ArrayList<Integer>();
if ((encoded & 0x1) != 0) {
ret.add(0);
}
if ((encoded & 0x2) != 0) {
ret.add(100);
}
if ((encoded & 0x4) != 0) {
ret.add(200);
}
if ((encoded & 0x8) != 0) {
ret.add(300);
}
if ((encoded & 0x10) != 0) {
ret.add(400);
}
if ((encoded & 0x20) != 0) {
ret.add(500);
}
if ((encoded & 0x400) != 0) {
ret.add(1000);
}
if ((encoded & 0x800) != 0) {
ret.add(1100);
}
if ((encoded & 0x1000) != 0) {
ret.add(1200);
}
if ((encoded & 0x2000) != 0) {
ret.add(1300);
}
if ((encoded & 0x4000) != 0) {
ret.add(1400);
}
if ((encoded & 0x8000) != 0) {
ret.add(1500);
}
if ((encoded & 0x20000) != 0) {
ret.add(2001); //im not sure of this one
ret.add(2200);
}
if ((encoded & 0x100000) != 0) {
ret.add(2000);
ret.add(2001); //?
}
if ((encoded & 0x200000) != 0) {
ret.add(2100);
}
if ((encoded & 0x400000) != 0) {
ret.add(2001); //?
ret.add(2200);
}
if ((encoded & 0x40000000) != 0) { //i haven't seen any higher than this o.o
ret.add(3000);
ret.add(3200);
ret.add(3300);
ret.add(3500);
}
return ret;
}
public static List<Integer> getJobBySimpleEncoding(int encoded) {
List<Integer> ret = new ArrayList<Integer>();
if ((encoded & 0x1) != 0) {
ret.add(200);
}
if ((encoded & 0x2) != 0) {
ret.add(300);
}
if ((encoded & 0x4) != 0) {
ret.add(400);
}
if ((encoded & 0x8) != 0) {
ret.add(500);
}
return ret;
}
}