脑洞大开,说说DP2实现暗黑赫拉迪克方块的方法
紧接上一篇《脑洞向关于DP插件的一些应用》没看过的小伙伴可以去搜一下
############################分割线##############################
自从有了合成方法以后,便有了一个不用设计图任意合成的方法,思路大致如下
使用dp2,可以检测背包内容,我们使用装备的前四格作为合成内容,在用户输入“//融合”时,可以对背包前四格进行判断,符合要求后,通过邮件发送合成完的装备,再通过dpx.item.delete(user, space, slot, count)函数将相关的道具删除。
例如,装备前四格分别放,三孔巨剑(700001)+魔攻宝石(800004)+独立宝石(800005)+属强宝石(800006)= 魔攻独立属强巨剑(904050601)
##########################################################################
if input == "//赫迪拉斯合成" then
local party = user:GetParty()
local dungeon = party:GetDungeon()
local dungeonId = dungeon:GetIndex()
local inven = user:GetCurCharacInvenR()
if inven:CheckItemExist(700001) > -1 and inven:CheckItemExist(800004) > -1 and inven:CheckItemExist(800005) > -1 and inven:CheckItemExist(800006) > -1 then
dpx.mail.item(user:GetCharacNo(), 3, "合成", "恭喜您合成成功",904050601,1)
dpx.item.delete(user, ItemSpace.INVENTORY, 1, 1);
dpx.item.delete(user, ItemSpace.INVENTORY, 2, 1);
dpx.item.delete(user, ItemSpace.INVENTORY, 3, 1);
dpx.item.delete(user, ItemSpace.INVENTORY, 34 1);
end
return 0
end
##########################################################################
那么问题就来了,这样一来得做多少装备呢?不急,我们用代码来生成一下
(以下是java代码,本人用java比较多,会其他的参考思路即可)
##########################################################################
public class ScriptCreater {
private static Map<String,String> equNames = new HashMap();
private static Map<String,String> runeNames = new HashMap();
private static Map<String,String> runeAttr = new HashMap();
//这个是装备类型的枚举
static {
equNames.put("01", "巨剑");
equNames.put("02", "短剑");
equNames.put("03", "太刀");
equNames.put("04", "光剑");
equNames.put("05", "钝器");
equNames.put("11", "臂铠");
}
//这个是宝石的枚举
static {
runeNames.put("01", "生命");
runeNames.put("02", "法力");
runeNames.put("03", "物攻");
runeNames.put("04", "魔攻");
runeNames.put("05", "独立");
runeNames.put("06", "属强");
}
//这个是装备属性的枚举
static {
runeAttr.put("01", "[HP MAX]\r\n" + "40\r\n");
runeAttr.put("02", "[MP MAX]\r\n" + "40\r\n");
runeAttr.put("03", "[equipment physical attack]\r\n" + "500600\r\n");
runeAttr.put("04", "[equipment magical attack]\r\n" + "500600\r\n");
runeAttr.put("05", "[separate attack]\r\n" + "100200\r\n");
runeAttr.put("06", "[all elemental attack]\r\n" + "40\r\n");
}
public static void main(String[] args) {
//遍历
Object[] equList = equNames.keySet().toArray();
Object[] runeList = runeNames.keySet().toArray();
for (int i = 0; i < runeList.length; i++) {
for (int j = 0; j < runeList.length; j++) {
for (int k = 0; k < runeList.length; k++) {
for (int l = 0; l < equList.length; l++) {
String name = runeNames.get(runeList[i]) + runeNames.get(runeList[j]) + runeNames.get(runeList[k]) + "的" + equNames.get(equList[j]);
if(i==3&&j==4&&k==5&&l==2) {
System.out.println("[name]\r\n\""+name+"\"\r\n" + runeAttr.get(runeList[i])+ runeAttr.get(runeList[j])+ runeAttr.get(runeList[k]));
}
}
}
}
}
}
}
##########################################################################
这个是生成结果,自己输出成文件就行了,随便输出了一个。
当然是不完全的,你可以通过像属性那样生成的方法,把他生成全。
##########################################################################
这样一来,我们通过代码生成了装备,生成的规则是
9+宝石1编号+宝石2编号+宝石3编号+武器类型
这样的话我们再把我们的lua脚本改一下就好了
7000开头代表带孔武器8000开头代表宝石
##########################################################################
if input == "//融合" then
local id1 = dpx.item.info(user, ItemSpace.INVENTORY, 1): GetType()
local id2 = dpx.item.info(user, ItemSpace.INVENTORY, 2): GetType()
local id3 = dpx.item.info(user, ItemSpace.INVENTORY, 3): GetType()
local id4 = dpx.item.info(user, ItemSpace.INVENTORY, 4): GetType()
//自己写一些判断逻辑,判断能否合成下面是判断第一个装备id是在700000-800000
if id1 > 700000 and id1<800000 and id2>800000 and id2<900000 and id3>800000 and id3<900000 and id4>800000 and id4<900000 then
//取余数就是要合成的编号例如二号宝石是800012,除以800000的余数是12
local eid = 9..id2%800000..id3%800000..id4%800000..id1%700000
dpx.mail.item(user:GetCharacNo(), 3, "合成", "恭喜您合成成功",eid,1)
end
end
#########################################################################
最后,DP2牛逼!
紧接上一篇《脑洞向关于DP插件的一些应用》没看过的小伙伴可以去搜一下
############################分割线##############################
自从有了合成方法以后,便有了一个不用设计图任意合成的方法,思路大致如下
使用dp2,可以检测背包内容,我们使用装备的前四格作为合成内容,在用户输入“//融合”时,可以对背包前四格进行判断,符合要求后,通过邮件发送合成完的装备,再通过dpx.item.delete(user, space, slot, count)函数将相关的道具删除。
例如,装备前四格分别放,三孔巨剑(700001)+魔攻宝石(800004)+独立宝石(800005)+属强宝石(800006)= 魔攻独立属强巨剑(904050601)
##########################################################################
if input == "//赫迪拉斯合成" then
local party = user:GetParty()
local dungeon = party:GetDungeon()
local dungeonId = dungeon:GetIndex()
local inven = user:GetCurCharacInvenR()
if inven:CheckItemExist(700001) > -1 and inven:CheckItemExist(800004) > -1 and inven:CheckItemExist(800005) > -1 and inven:CheckItemExist(800006) > -1 then
dpx.mail.item(user:GetCharacNo(), 3, "合成", "恭喜您合成成功",904050601,1)
dpx.item.delete(user, ItemSpace.INVENTORY, 1, 1);
dpx.item.delete(user, ItemSpace.INVENTORY, 2, 1);
dpx.item.delete(user, ItemSpace.INVENTORY, 3, 1);
dpx.item.delete(user, ItemSpace.INVENTORY, 34 1);
end
return 0
end
##########################################################################
那么问题就来了,这样一来得做多少装备呢?不急,我们用代码来生成一下
(以下是java代码,本人用java比较多,会其他的参考思路即可)
##########################################################################
public class ScriptCreater {
private static Map<String,String> equNames = new HashMap();
private static Map<String,String> runeNames = new HashMap();
private static Map<String,String> runeAttr = new HashMap();
//这个是装备类型的枚举
static {
equNames.put("01", "巨剑");
equNames.put("02", "短剑");
equNames.put("03", "太刀");
equNames.put("04", "光剑");
equNames.put("05", "钝器");
equNames.put("11", "臂铠");
}
//这个是宝石的枚举
static {
runeNames.put("01", "生命");
runeNames.put("02", "法力");
runeNames.put("03", "物攻");
runeNames.put("04", "魔攻");
runeNames.put("05", "独立");
runeNames.put("06", "属强");
}
//这个是装备属性的枚举
static {
runeAttr.put("01", "[HP MAX]\r\n" + "40\r\n");
runeAttr.put("02", "[MP MAX]\r\n" + "40\r\n");
runeAttr.put("03", "[equipment physical attack]\r\n" + "500600\r\n");
runeAttr.put("04", "[equipment magical attack]\r\n" + "500600\r\n");
runeAttr.put("05", "[separate attack]\r\n" + "100200\r\n");
runeAttr.put("06", "[all elemental attack]\r\n" + "40\r\n");
}
public static void main(String[] args) {
//遍历
Object[] equList = equNames.keySet().toArray();
Object[] runeList = runeNames.keySet().toArray();
for (int i = 0; i < runeList.length; i++) {
for (int j = 0; j < runeList.length; j++) {
for (int k = 0; k < runeList.length; k++) {
for (int l = 0; l < equList.length; l++) {
String name = runeNames.get(runeList[i]) + runeNames.get(runeList[j]) + runeNames.get(runeList[k]) + "的" + equNames.get(equList[j]);
if(i==3&&j==4&&k==5&&l==2) {
System.out.println("[name]\r\n\""+name+"\"\r\n" + runeAttr.get(runeList[i])+ runeAttr.get(runeList[j])+ runeAttr.get(runeList[k]));
}
}
}
}
}
}
}
##########################################################################
这个是生成结果,自己输出成文件就行了,随便输出了一个。
当然是不完全的,你可以通过像属性那样生成的方法,把他生成全。
##########################################################################
这样一来,我们通过代码生成了装备,生成的规则是
9+宝石1编号+宝石2编号+宝石3编号+武器类型
这样的话我们再把我们的lua脚本改一下就好了
7000开头代表带孔武器8000开头代表宝石
##########################################################################
if input == "//融合" then
local id1 = dpx.item.info(user, ItemSpace.INVENTORY, 1): GetType()
local id2 = dpx.item.info(user, ItemSpace.INVENTORY, 2): GetType()
local id3 = dpx.item.info(user, ItemSpace.INVENTORY, 3): GetType()
local id4 = dpx.item.info(user, ItemSpace.INVENTORY, 4): GetType()
//自己写一些判断逻辑,判断能否合成下面是判断第一个装备id是在700000-800000
if id1 > 700000 and id1<800000 and id2>800000 and id2<900000 and id3>800000 and id3<900000 and id4>800000 and id4<900000 then
//取余数就是要合成的编号例如二号宝石是800012,除以800000的余数是12
local eid = 9..id2%800000..id3%800000..id4%800000..id1%700000
dpx.mail.item(user:GetCharacNo(), 3, "合成", "恭喜您合成成功",eid,1)
end
end
#########################################################################
最后,DP2牛逼!