Merge branch 'master' of http://60.1.1.230/backend/jieling_server
# Conflicts: # conf/server/OptionConfig.txtback_recharge
commit
81a603e0dc
|
@ -35,11 +35,17 @@ public class MongoUpdateCache {
|
||||||
Map.Entry<String, UpdateRequest> entry = it.next();
|
Map.Entry<String, UpdateRequest> entry = it.next();
|
||||||
String key1 = entry.getKey();
|
String key1 = entry.getKey();
|
||||||
if(!fullKey.equals(key1)){
|
if(!fullKey.equals(key1)){
|
||||||
|
//解决类似 item.1 item.11 问题
|
||||||
if (fullKey.contains(key1)) {
|
if (fullKey.contains(key1)) {
|
||||||
return;
|
if(checkOverride(key1,fullKey)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if (key1.contains(fullKey)) {
|
if (key1.contains(fullKey)) {
|
||||||
it.remove();
|
if(checkOverride(key1,fullKey)){
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +55,15 @@ public class MongoUpdateCache {
|
||||||
listRequest.put(fullKey, request);
|
listRequest.put(fullKey, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean checkOverride(String key1,String key2){
|
||||||
|
String[] fullKeyArray = key1.split(".");
|
||||||
|
String[] key1Array = key2.split(".");
|
||||||
|
if(fullKeyArray.length == key1Array.length && !fullKeyArray[fullKeyArray.length -1].equals(key1Array[key1Array.length -1])){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected void update(LjsdMongoTemplate ljsdMongoTemplate) throws IllegalAccessException {
|
protected void update(LjsdMongoTemplate ljsdMongoTemplate) throws IllegalAccessException {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Id OpenLevel RecommendForce RecommendHeroIds MinNum BaseRewardGroup RandomRewardGroup RecommendRewardGroup
|
Id OpenLevel RecommendForce RecommendHeroIds MinNum BaseRewardGroup RandomRewardGroup RecommendRewardGroup
|
||||||
int int int mut,int#int,1 int mut,int#int,1 mut,int#int,1 mut,int#int,1
|
int int int mut,int#int,1 int mut,int#int,1 mut,int#int,1 mut,int#int,2
|
||||||
1 101001 1000 3#1#2 5 101 1001#1002 2001#2002#2003
|
1 101001 1000 2#1#2 5 101 111 2001#2002#2003|2001#2002#2003
|
||||||
2 102001 2000 3#1#2 5 102 1001#1002 2001#2002#2003
|
2 102001 2000 2#1#2 5 102 112 2001#2002#2003|2001#2002#2003
|
||||||
3 102001 3000 3#1#2 5 103 1001#1002 2001#2002#2003
|
3 102001 3000 2#1#2 5 103 113 2001#2002#2003|2001#2002#2003
|
||||||
4 102001 4000 3#1#2 5 104 1001#1002 2001#2002#2003
|
4 102001 4000 2#1#2 5 104 114 2001#2002#2003|2001#2002#2003
|
||||||
5 102001 5000 3#1#2 5 105 1001#1002 2001#2002#2003
|
5 102001 5000 2#1#2 5 105 115 2001#2002#2003|2001#2002#2003
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Id ItemId Chance GrowChance RandomMin RandomMax
|
Id ItemId Chance GrowChance RandomMin RandomMax
|
||||||
int int int float int int
|
int int int float int int
|
||||||
100 3001 0 1.0 0 0
|
100 3001 1 1.0 0 0
|
||||||
101 3001 100 1.0 1 1
|
101 3001 100 1.0 1 1
|
||||||
102 3002 100 1.0 1 1
|
102 3002 100 1.0 1 1
|
||||||
103 3003 100 1.0 1 1
|
103 3003 100 1.0 1 1
|
||||||
|
|
|
@ -662,93 +662,93 @@ int mut,float#float,2 mut,int#int,2 mut,float#float,2 float
|
||||||
500108 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 1.0
|
500108 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 1.0
|
||||||
500109 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 1.0
|
500109 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 1.0
|
||||||
500110 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 1.0
|
500110 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 1.0
|
||||||
500201 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500201 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500202 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500202 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500203 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500203 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500204 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500204 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500205 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500205 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500206 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500206 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500207 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500207 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500208 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500208 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500209 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500209 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500210 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2.0
|
500210 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 2
|
||||||
500301 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500301 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500302 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500302 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500303 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500303 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500304 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500304 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500305 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500305 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500306 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500306 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500307 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500307 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500308 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500308 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500309 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500309 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500310 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3.0
|
500310 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 3
|
||||||
500401 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500401 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500402 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500402 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500403 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500403 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500404 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500404 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500405 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500405 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500406 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500406 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500407 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500407 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500408 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500408 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500409 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500409 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500410 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4.0
|
500410 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 4
|
||||||
500501 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500501 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500502 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500502 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500503 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500503 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500504 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500504 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500505 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500505 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500506 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500506 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500507 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500507 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500508 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500508 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500509 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500509 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500510 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5.0
|
500510 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 5
|
||||||
500601 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500601 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500602 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500602 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500603 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500603 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500604 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500604 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500605 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500605 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500606 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500606 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500607 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500607 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500608 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500608 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500609 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500609 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500610 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6.0
|
500610 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 6
|
||||||
500701 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500701 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500702 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500702 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500703 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500703 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500704 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500704 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500705 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500705 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500706 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500706 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500707 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500707 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500708 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500708 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500709 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500709 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500710 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7.0
|
500710 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 7
|
||||||
500801 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500801 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500802 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500802 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500803 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500803 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500804 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500804 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500805 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500805 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500806 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500806 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500807 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500807 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500808 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500808 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500809 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500809 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500810 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8.0
|
500810 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 8
|
||||||
500901 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500901 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500902 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500902 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500903 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500903 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500904 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500904 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500905 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500905 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500906 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500906 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500907 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500907 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500908 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500908 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500909 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500909 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
500910 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9.0
|
500910 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 9
|
||||||
501001 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501001 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501002 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501002 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501003 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501003 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501004 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501004 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501005 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501005 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501006 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501006 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501007 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501007 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501008 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501008 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501009 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501009 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
501010 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10.0
|
501010 20012#0.7|10014#0.7 26#27|25 600|100#4|2#0.1#4 10
|
||||||
|
|
|
@ -25,14 +25,62 @@ local Random = Random
|
||||||
local _fightData
|
local _fightData
|
||||||
local _optionData
|
local _optionData
|
||||||
|
|
||||||
function PrintTable(tb)
|
local function newPairs(tbl, func)
|
||||||
|
if func == nil then
|
||||||
|
return pairs(tbl)
|
||||||
|
end
|
||||||
|
|
||||||
|
local ary = {}
|
||||||
|
local lastUsed = 0
|
||||||
|
for key --[[, val--]] in pairs(tbl) do
|
||||||
|
if (lastUsed == 0) then
|
||||||
|
ary[1] = key
|
||||||
|
else
|
||||||
|
local done = false
|
||||||
|
for j=1,lastUsed do -- 进行插入排序
|
||||||
|
if (func(key, ary[j]) == true) then
|
||||||
|
arrayInsert( ary, key, j )
|
||||||
|
done = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if (done == false) then
|
||||||
|
ary[lastUsed + 1] = key
|
||||||
|
end
|
||||||
|
end
|
||||||
|
lastUsed = lastUsed + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 定义并返回迭代器
|
||||||
|
local i = 0
|
||||||
|
local iter = function ()
|
||||||
|
i = i + 1
|
||||||
|
if ary[i] == nil then
|
||||||
|
return nil
|
||||||
|
else
|
||||||
|
return ary[i], tbl[ary[i]]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return iter
|
||||||
|
end
|
||||||
|
|
||||||
|
local function PrintTable(tb)
|
||||||
local indent_str = "{"
|
local indent_str = "{"
|
||||||
for k,v in pairs(tb) do
|
for k=1, #tb do
|
||||||
indent_str = string.format("%s%s=%s", indent_str,
|
local v = tb[k]
|
||||||
type(k) == "number" and string.format("[%d]",k) or tostring(k),
|
|
||||||
type(v) == "table" and "" or tostring(v)..",")
|
|
||||||
if type(v) == "table" then
|
if type(v) == "table" then
|
||||||
indent_str = indent_str .. PrintTable(v)
|
indent_str = indent_str .. PrintTable(v)
|
||||||
|
else
|
||||||
|
indent_str = indent_str .. tostring(v)..","
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for k,v in newPairs(tb) do
|
||||||
|
if type(k) ~= "number" then
|
||||||
|
if type(v) == "table" then
|
||||||
|
indent_str = string.format("%s%s=%s", indent_str, tostring(k), PrintTable(v))
|
||||||
|
else
|
||||||
|
indent_str = string.format("%s%s=%s", indent_str, tostring(k), tostring(v)..",")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
indent_str = indent_str .. "},"
|
indent_str = indent_str .. "},"
|
||||||
|
@ -48,19 +96,36 @@ local function error( err )
|
||||||
os.date("%H"),
|
os.date("%H"),
|
||||||
os.date("%M"),
|
os.date("%M"),
|
||||||
os.date("%S"))
|
os.date("%S"))
|
||||||
local file = io.open("LogError/"..time..".txt", "a")
|
local file = io.open("luafight/LogError/"..time..".txt", "a")
|
||||||
file:write("fightData:\n"..PrintTable(_fightData).."\n")
|
--file:write("fightData:\n"..PrintTable(_fightData).."\n")
|
||||||
file:write("optionData:\n"..PrintTable(_optionData).."\n")
|
--file:write("optionData:\n"..PrintTable(_optionData).."\n")
|
||||||
file:write("error:\n"..debug.traceback(err).."\n")
|
file:write("error:\n"..debug.traceback(err).."\n")
|
||||||
io.close(file)
|
io.close(file)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function generateRecordFile()
|
||||||
|
local time = string.format("%d-%d-%d-%d-%d-%d",
|
||||||
|
os.date("%Y"),
|
||||||
|
os.date("%m"),
|
||||||
|
os.date("%d"),
|
||||||
|
os.date("%H"),
|
||||||
|
os.date("%M"),
|
||||||
|
os.date("%S"))
|
||||||
|
local file = io.open("luafight/BattleRecord/"..time..".txt", "a")
|
||||||
|
local record = BattleLogic.GetRecord()
|
||||||
|
for i=1, #record do
|
||||||
|
file:write(record[i].."\n")
|
||||||
|
end
|
||||||
|
io.close(file)
|
||||||
|
end
|
||||||
|
|
||||||
function BattleMain.Execute(seed, fightData, optionData)
|
function BattleMain.Execute(seed, fightData, optionData)
|
||||||
_fightData = fightData
|
_fightData = fightData
|
||||||
_optionData = optionData
|
_optionData = optionData
|
||||||
|
|
||||||
|
print(PrintTable(fightData))
|
||||||
--该开关用于输出战斗过程中的日志,用于验证前后端是否出现战斗不同步
|
--该开关用于输出战斗过程中的日志,用于验证前后端是否出现战斗不同步
|
||||||
BattleLogic.IsOpenBattleRecord = false
|
BattleLogic.IsOpenBattleRecord = true
|
||||||
|
|
||||||
if xpcall(function ()
|
if xpcall(function ()
|
||||||
Random.SetSeed(seed)
|
Random.SetSeed(seed)
|
||||||
|
@ -86,7 +151,7 @@ function BattleMain.Execute(seed, fightData, optionData)
|
||||||
resultList.result = BattleLogic.Result
|
resultList.result = BattleLogic.Result
|
||||||
|
|
||||||
if BattleLogic.IsOpenBattleRecord then
|
if BattleLogic.IsOpenBattleRecord then
|
||||||
BattleLogic.GenerateRecordFile()
|
generateRecordFile()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- print -----------------------------------------
|
-- print -----------------------------------------
|
||||||
|
@ -95,9 +160,12 @@ function BattleMain.Execute(seed, fightData, optionData)
|
||||||
--end
|
--end
|
||||||
--print("最终运行帧数:"..BattleLogic.CurFrame())
|
--print("最终运行帧数:"..BattleLogic.CurFrame())
|
||||||
--print("result:"..BattleLogic.Result)
|
--print("result:"..BattleLogic.Result)
|
||||||
|
|
||||||
return resultList
|
return resultList
|
||||||
end
|
end
|
||||||
return { result = -1 }
|
return { result = -1 }
|
||||||
end
|
end
|
||||||
|
--BattleMain.Execute(1553167956, {playerData={{professionId=3,passivity={},type=1,skill={0,{40001,0.7,{1,2.3,2,},},{30011,0.7,{4,9,0.2,4,1,},{4,10,0.2,4,1,},},},superSkill={1.6,{20211,0.7,{1,3.3,2,},{15,1.98,2,1.98,},},},roleId=10022,camp=0,property={1,1676,1678,248,167,200,173,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=5,passivity={},type=1,skill={0,{40001,0.7,{11,0.93,2,2,0.2,},},},superSkill={3,{20000,0.7,{2,1.06,2,},{3,0.6,1,4,},},},roleId=10008,camp=0,property={1,2206,2208,221,193,232,130,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=4,passivity={},type=1,skill={0,{40001,0.7,{1,1.35,2,},},{30011,0.7,{3,0,0,5,},},},superSkill={2.5,{20000,0.7,{14,1.55,2,1,10023,0.2,},},},roleId=10023,camp=0,property={1,1439,1441,284,131,157,168,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=1,passivity={},type=1,skill={0,{40001,0.7,{1,1,1,},},{30011,0.7,{4,9,0.1,5,1,},{4,10,0.1,5,1,},},},superSkill={2.3,{20312,0.7,{19,1.35,1,0.5,5,},},},roleId=10013,camp=0,property={1,1678,1680,246,194,162,163,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=3,passivity={},type=1,skill={0,{40001,0.7,{1,2.3,2,},},{30011,0.7,{4,9,0.2,4,1,},{4,10,0.2,4,1,},},},superSkill={1.6,{20211,0.7,{1,3.3,2,},{15,1.98,2,1.98,},},},roleId=10022,camp=0,property={17,2732,2734,401,272,326,308,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},teamSkill={},},enemyData={{{professionId=0,passivity={},type=2,skill={0,{20013,0.7,{1,0.45,1,},},},superSkill={},roleId=1,camp=1,property={0,483,483,260,61,61,240,0,0,0.3,0.3,0.2,1.5,1,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=0,passivity={},type=2,skill={0,{20013,0.7,{1,0.45,1,},},},superSkill={},roleId=2,camp=1,property={0,483,483,260,61,61,80,0,0,0.3,0.3,0.2,1.5,1,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=0,passivity={},type=2,skill={0,{20013,0.7,{1,0.45,1,},},},superSkill={},roleId=3,camp=1,property={0,483,483,260,61,61,7,0,0,0.3,0.3,0.2,1.5,1,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},teamSkill={},},},})
|
||||||
|
--BattleMain.Execute(1553167956, {playerData={{professionId=4,passivity={},type=1,skill={0,{40001,0.7,{1,1.35,2,},},{30011,0.7,{3,0,0,5,},},},superSkill={2.5,{20000,0.7,{14,1.55,2,1,10023,0.2,},},},roleId=10023,camp=0,property={1,1439,1441,284,131,157,168,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=3,passivity={},type=1,skill={0,{40001,0.7,{1,2.3,2,},},{30011,0.7,{4,9,0.2,4,1,},{4,9,0.2,4,1,},},},superSkill={1.6,{20211,0.7,{1,3.3,2,},{15,1.98,2,1.98,},},},roleId=10022,camp=0,property={1,1676,1678,248,167,200,173,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=2,passivity={},type=1,skill={0,{40001,0.7,{1,1.05,2,},{4,4,5,5,3,},},},superSkill={2.3,{20000,0.7,{2,1.89,2,},},{20012,0.7,{3,1,5,5,},},},roleId=10021,camp=0,property={1,1920,1922,209,170,204,178,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=5,passivity={},type=1,skill={0,{40001,0.7,{11,0.93,2,2,0.2,},},},superSkill={3,{20000,0.7,{2,1.06,2,},{3,0.6,1,4,},},},roleId=10008,camp=0,property={1,2206,2208,221,193,232,130,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=1,passivity={},type=1,skill={0,{40001,0.7,{1,1,1,},},{30011,0.7,{4,9,0.1,5,1,},{4,9,0.1,5,1,},},},superSkill={2.3,{20312,0.7,{19,1.35,1,0.5,5,},},},roleId=10013,camp=0,property={1,1678,1680,246,194,162,163,0,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},teamSkill={{3,{20012,0.7,{26,600,},{27,100,4,},},{10014,0.7,{25,2,0.1,4,},},},},},enemyData={{{professionId=0,passivity={},type=2,skill={0,{20011,0.7,{1,1,1,},{3,0.3,1,3,},},},superSkill={},roleId=14,camp=1,property={0,772,772,260,61,61,80,0,0,0.3,0.3,0.2,1.5,1,0,0,0,0,0,0,0,0,0,0,2,2,},quality=1,},{professionId=0,passivity={},type=2,skill={0,{20013,0.7,{1,0.45,1,},},},superSkill={},roleId=1,camp=1,property={0,483,483,260,61,61,240,0,0,0.3,0.3,0.2,1.5,1,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},{professionId=0,passivity={},type=2,skill={0,{20013,0.7,{1,0.45,1,},},},superSkill={},roleId=3,camp=1,property={0,483,483,260,61,61,7,0,0,0.3,0.3,0.2,1.5,1,0,0,0,0,0,0,0,0,0,0,0,0,},quality=1,},teamSkill={},},},})
|
||||||
|
|
||||||
return BattleMain
|
return BattleMain
|
|
@ -42,30 +42,18 @@ function Buff.Create(caster, type, duration, ...)
|
||||||
return buff
|
return buff
|
||||||
end
|
end
|
||||||
|
|
||||||
local queuePool = BattleObjectPool.New(function ()
|
|
||||||
return BattleQueue.New()
|
|
||||||
end)
|
|
||||||
local dicPool = BattleObjectPool.New(function ()
|
|
||||||
return BattleDictionary.New()
|
|
||||||
end)
|
|
||||||
BuffManager = {}
|
BuffManager = {}
|
||||||
BuffManager.__index = BuffManager
|
BuffManager.__index = BuffManager
|
||||||
|
|
||||||
function BuffManager.New()
|
function BuffManager.New()
|
||||||
local instance = {owner=0, buffQueue = queuePool:Get(), buffList = dicPool:Get()}
|
local instance = {owner=0, buffQueue = BattleQueue.New(), buffList = BattleDictionary.New()}
|
||||||
setmetatable(instance, BuffManager)
|
setmetatable(instance, BuffManager)
|
||||||
return instance
|
return instance
|
||||||
end
|
end
|
||||||
|
|
||||||
function BuffManager:Init(owner)
|
function BuffManager:Init(owner)
|
||||||
self.owner = owner
|
|
||||||
end
|
|
||||||
|
|
||||||
function BuffManager:Dispose(owner)
|
|
||||||
self.buffQueue:Clear()
|
self.buffQueue:Clear()
|
||||||
self.buffList:Clear()
|
self.buffList:Clear()
|
||||||
queuePool:Put(self.buffQueue)
|
|
||||||
dicPool:Put(self.buffList)
|
|
||||||
self.owner = owner
|
self.owner = owner
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -245,12 +245,13 @@ local effectList = {
|
||||||
local f1 = args[1]
|
local f1 = args[1]
|
||||||
local dt = args[2]
|
local dt = args[2]
|
||||||
local f2 = args[3]
|
local f2 = args[3]
|
||||||
|
|
||||||
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval)
|
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval)
|
||||||
if caster.camp == 0 and target.camp == 1 then
|
if caster.camp == 0 and target.camp == 1 then
|
||||||
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
|
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
|
||||||
end
|
end
|
||||||
BattleLogic.WaitForTrigger(interval, function ()
|
BattleLogic.WaitForTrigger(interval, function ()
|
||||||
local dmg = BattleUtil.CalDamage(caster, target, dt, f1)
|
local dmg, crit = BattleUtil.CalDamage(caster, target, dt, f1)
|
||||||
if target.isDead then
|
if target.isDead then
|
||||||
local arr = BattleLogic.Query(function (r) return r.camp ~= caster.camp and r.uid ~= target.uid end)
|
local arr = BattleLogic.Query(function (r) return r.camp ~= caster.camp and r.uid ~= target.uid end)
|
||||||
for i=1, #arr do
|
for i=1, #arr do
|
||||||
|
@ -314,25 +315,6 @@ local effectList = {
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end,
|
end,
|
||||||
--造成[a]%的[b]伤害,若暴击,则减少下次发动技能CD[c]秒。
|
|
||||||
--a[float],b[伤害类型],c[float]
|
|
||||||
[18] = function(caster, target, args, interval)
|
|
||||||
local f1 = args[1]
|
|
||||||
local dt = args[2]
|
|
||||||
local f2 = args[3]
|
|
||||||
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval)
|
|
||||||
if caster.camp == 0 and target.camp == 1 then
|
|
||||||
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
|
|
||||||
end
|
|
||||||
BattleLogic.WaitForTrigger(interval, function ()
|
|
||||||
local d, crit = BattleUtil.CalDamage(caster, target, dt, f1)
|
|
||||||
if crit then
|
|
||||||
if target.skill then
|
|
||||||
target.skill.sp = target.skill.sp + floor(f2 * BattleLogic.GameFrameRate)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
--造成[a]%的[b]伤害,有[c]%的概率追加伤害,最多可追加[d]次。(0无限追加)
|
--造成[a]%的[b]伤害,有[c]%的概率追加伤害,最多可追加[d]次。(0无限追加)
|
||||||
--a[float],b[伤害类型],c[float],d[int]
|
--a[float],b[伤害类型],c[float],d[int]
|
||||||
[19] = function(caster, target, args, interval)
|
[19] = function(caster, target, args, interval)
|
||||||
|
@ -486,6 +468,24 @@ local effectList = {
|
||||||
target:AddBuff(Buff.Create(caster, BuffName.DOT, d2, 1, 0, d1, 1))
|
target:AddBuff(Buff.Create(caster, BuffName.DOT, d2, 1, 0, d1, 1))
|
||||||
end)
|
end)
|
||||||
end,
|
end,
|
||||||
|
--造成[a]%的[b]伤害,对[c]造成额外[d]%伤害
|
||||||
|
--a[float],b[伤害类型,]c[持续伤害状态],d[float]
|
||||||
|
[28] = function(caster, target, args, interval)
|
||||||
|
local f1 = args[1]
|
||||||
|
local dt = args[2]
|
||||||
|
local dot = args[3]
|
||||||
|
local f2 = args[4]
|
||||||
|
caster.Event:DispatchEvent(BattleEventName.RoleViewBullet, interval)
|
||||||
|
if caster.camp == 0 and target.camp == 1 then
|
||||||
|
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, target, interval)
|
||||||
|
end
|
||||||
|
BattleLogic.WaitForTrigger(interval, function ()
|
||||||
|
if target.BuffMgr:HasBuff(BuffName.DOT, function (buff) return dot == 0 or buff.damageType == dot end) then
|
||||||
|
f1 = f1 + f2
|
||||||
|
end
|
||||||
|
BattleUtil.CalDamage(caster, target, dt, f1)
|
||||||
|
end)
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
return effectList
|
return effectList
|
|
@ -2,19 +2,19 @@ local effect = require("Modules/Battle/Logic/Base/Effect")
|
||||||
local floor = math.floor
|
local floor = math.floor
|
||||||
local max = math.max
|
local max = math.max
|
||||||
local min = math.min
|
local min = math.min
|
||||||
|
local gameFrameRate = BattleLogic.GameFrameRate
|
||||||
--local BattleConst = BattleConst
|
--local BattleConst = BattleConst
|
||||||
--local RoleDataName = RoleDataName
|
--local RoleDataName = RoleDataName
|
||||||
--local BattleEventName = BattleEventName
|
--local BattleEventName = BattleEventName
|
||||||
|
|
||||||
local chooseList = {}
|
|
||||||
local function chooseTarget(role, chooseId, exceptList)
|
local function chooseTarget(role, chooseId, exceptList)
|
||||||
local chooseType = floor(chooseId / 10000) % 10
|
local chooseType = floor(chooseId / 10000) % 10
|
||||||
local chooseWeight = floor(chooseId / 100) % 10
|
local chooseWeight = floor(chooseId / 100) % 10
|
||||||
local sort = floor(chooseId / 10) % 10
|
local sort = floor(chooseId / 10) % 10
|
||||||
local exceptNum = #exceptList
|
local exceptNum = exceptList.size
|
||||||
local num = chooseId % 10
|
local num = chooseId % 10
|
||||||
|
|
||||||
local arr = BattleLogic.Query()
|
local arr
|
||||||
if chooseType == 1 then
|
if chooseType == 1 then
|
||||||
arr = BattleLogic.Query(function (r)
|
arr = BattleLogic.Query(function (r)
|
||||||
for i=1, exceptList.size do
|
for i=1, exceptList.size do
|
||||||
|
@ -26,8 +26,7 @@ local function chooseTarget(role, chooseId, exceptList)
|
||||||
end)
|
end)
|
||||||
elseif chooseType == 2 then
|
elseif chooseType == 2 then
|
||||||
if role.lockTarget and num == 1 then
|
if role.lockTarget and num == 1 then
|
||||||
arr[1] = role.lockTarget
|
return {role.lockTarget}
|
||||||
return arr
|
|
||||||
end
|
end
|
||||||
arr = BattleLogic.Query(function (r)
|
arr = BattleLogic.Query(function (r)
|
||||||
for i=1, exceptList.size do
|
for i=1, exceptList.size do
|
||||||
|
@ -38,77 +37,71 @@ local function chooseTarget(role, chooseId, exceptList)
|
||||||
return r.camp ~= role.camp
|
return r.camp ~= role.camp
|
||||||
end)
|
end)
|
||||||
elseif chooseType == 3 then
|
elseif chooseType == 3 then
|
||||||
arr[1] = role
|
return {role}
|
||||||
return arr
|
|
||||||
elseif chooseType == 4 then
|
elseif chooseType == 4 then
|
||||||
return {BattleLogic.GetAggro(role.camp)}
|
return {BattleLogic.GetAggro(role.camp)}
|
||||||
|
else
|
||||||
|
arr = BattleLogic.Query()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
BattleUtil.RandomList(arr)
|
||||||
if chooseWeight == 0 then
|
if chooseWeight == 0 then
|
||||||
BattleUtil.RandomList(arr)
|
BattleUtil.RandomList(arr)
|
||||||
elseif chooseWeight == 1 then
|
elseif chooseWeight == 1 then
|
||||||
table.sort(arr, function(a, b)
|
BattleUtil.Sort(arr, function(a, b)
|
||||||
local r1 = a:GetRoleData(RoleDataName.Hp)
|
local r1 = a:GetRoleData(RoleDataName.Hp)
|
||||||
local r2 = b:GetRoleData(RoleDataName.Hp)
|
local r2 = b:GetRoleData(RoleDataName.Hp)
|
||||||
return sort == 1 and r1 < r2 or r1 > r2
|
return sort == 1 and r1 < r2 or r1 > r2
|
||||||
end)
|
end)
|
||||||
elseif chooseWeight == 2 then
|
elseif chooseWeight == 2 then
|
||||||
table.sort(arr, function(a, b)
|
BattleUtil.Sort(arr, function(a, b)
|
||||||
local r1 = a:GetRoleData(RoleDataName.Hp) / a:GetRoleData(RoleDataName.MaxHp)
|
local r1 = a:GetRoleData(RoleDataName.Hp) / a:GetRoleData(RoleDataName.MaxHp)
|
||||||
local r2 = b:GetRoleData(RoleDataName.Hp) / b:GetRoleData(RoleDataName.MaxHp)
|
local r2 = b:GetRoleData(RoleDataName.Hp) / b:GetRoleData(RoleDataName.MaxHp)
|
||||||
return sort == 1 and r1 < r2 or r1 > r2
|
return sort == 1 and r1 < r2 or r1 > r2
|
||||||
end)
|
end)
|
||||||
elseif chooseWeight == 3 then
|
elseif chooseWeight == 3 then
|
||||||
table.sort(arr, function(a, b)
|
BattleUtil.Sort(arr, function(a, b)
|
||||||
local r1 = a:GetRoleData(RoleDataName.Attack)
|
local r1 = a:GetRoleData(RoleDataName.Attack)
|
||||||
local r2 = b:GetRoleData(RoleDataName.Attack)
|
local r2 = b:GetRoleData(RoleDataName.Attack)
|
||||||
return sort == 1 and r1 < r2 or r1 > r2
|
return sort == 1 and r1 < r2 or r1 > r2
|
||||||
end)
|
end)
|
||||||
elseif chooseWeight == 4 then
|
elseif chooseWeight == 4 then
|
||||||
table.sort(arr, function(a, b)
|
BattleUtil.Sort(arr, function(a, b)
|
||||||
local r1 = a:GetRoleData(RoleDataName.PhysicalDefence)
|
local r1 = a:GetRoleData(RoleDataName.PhysicalDefence)
|
||||||
local r2 = b:GetRoleData(RoleDataName.PhysicalDefence)
|
local r2 = b:GetRoleData(RoleDataName.PhysicalDefence)
|
||||||
return sort == 1 and r1 < r2 or r1 > r2
|
return sort == 1 and r1 < r2 or r1 > r2
|
||||||
end)
|
end)
|
||||||
elseif chooseWeight == 5 then
|
elseif chooseWeight == 5 then
|
||||||
table.sort(arr, function(a, b)
|
BattleUtil.Sort(arr, function(a, b)
|
||||||
local r1 = a:GetRoleData(RoleDataName.PhysicalDefence)
|
local r1 = a:GetRoleData(RoleDataName.PhysicalDefence)
|
||||||
local r2 = b:GetRoleData(RoleDataName.PhysicalDefence)
|
local r2 = b:GetRoleData(RoleDataName.PhysicalDefence)
|
||||||
return sort == 1 and r1 < r2 or r1 > r2
|
return sort == 1 and r1 < r2 or r1 > r2
|
||||||
end)
|
end)
|
||||||
elseif chooseWeight == 6 then
|
elseif chooseWeight == 6 then
|
||||||
table.sort(arr, function(a, b)
|
BattleUtil.Sort(arr, function(a, b)
|
||||||
local r1 = a:GetRoleData(RoleDataName.MagicDefence)
|
local r1 = a:GetRoleData(RoleDataName.MagicDefence)
|
||||||
local r2 = b:GetRoleData(RoleDataName.MagicDefence)
|
local r2 = b:GetRoleData(RoleDataName.MagicDefence)
|
||||||
return sort == 1 and r1 < r2 or r1 > r2
|
return sort == 1 and r1 < r2 or r1 > r2
|
||||||
end)
|
end)
|
||||||
elseif chooseWeight == 7 then
|
elseif chooseWeight == 7 then
|
||||||
table.sort(arr, function(a, b)
|
BattleUtil.Sort(arr, function(a, b)
|
||||||
local r1 = a:GetRoleData(RoleDataName.MagicDefence)
|
local r1 = a:GetRoleData(RoleDataName.MagicDefence)
|
||||||
local r2 = b:GetRoleData(RoleDataName.MagicDefence)
|
local r2 = b:GetRoleData(RoleDataName.MagicDefence)
|
||||||
return sort == 1 and r1 < r2 or r1 > r2
|
return sort == 1 and r1 < r2 or r1 > r2
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
for i=1, #chooseList do
|
if exceptNum > 0 then
|
||||||
chooseList[i] = nil
|
local count = #arr
|
||||||
|
for i=1, min(exceptNum, count) do
|
||||||
|
for j=count, i+1, -1 do
|
||||||
|
arr[j] = arr[j-1]
|
||||||
|
end
|
||||||
|
arr[i] = exceptList.buffer[i]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
--local chooseList = {}
|
|
||||||
for i=1, exceptNum do
|
|
||||||
chooseList[i] = exceptList[i]
|
|
||||||
end
|
|
||||||
for i=1+exceptNum, num == 0 and #arr or min(#arr, num) do
|
|
||||||
chooseList[i] = arr[i]
|
|
||||||
end
|
|
||||||
arr = chooseList
|
|
||||||
return arr
|
return arr
|
||||||
end
|
end
|
||||||
local effectPool = BattleObjectPool.New(function ()
|
|
||||||
return {0, {}} -- type, {args, ...}
|
|
||||||
end)
|
|
||||||
local effectGroupPool = BattleObjectPool.New(function ()
|
|
||||||
return { 0, 0, {}} -- chooseId, duration, {effect1, effect2, ...}
|
|
||||||
end)
|
|
||||||
|
|
||||||
Skill = {}
|
Skill = {}
|
||||||
|
|
||||||
|
@ -134,11 +127,11 @@ function Skill:Init(role, effectData)
|
||||||
local v
|
local v
|
||||||
for i=2, #effectData do
|
for i=2, #effectData do
|
||||||
v = effectData[i]
|
v = effectData[i]
|
||||||
local effectGroup = effectGroupPool:Get() -- chooseId, duration, {effect1, effect2, ...}
|
local effectGroup = { 0, 0, {}} -- chooseId, duration, {effect1, effect2, ...}
|
||||||
effectGroup[1] = v[1] --chooseId
|
effectGroup[1] = v[1] --chooseId
|
||||||
effectGroup[2] = v[2] --duration
|
effectGroup[2] = v[2] --duration
|
||||||
for j=3, #v do --effectList
|
for j=3, #v do --effectList
|
||||||
local effect = effectPool:Get() -- type, {args, ...}
|
local effect = {0, {}} -- type, {args, ...}
|
||||||
effect[1] = v[j][1]
|
effect[1] = v[j][1]
|
||||||
for k=2, #v[j] do
|
for k=2, #v[j] do
|
||||||
effect[2][k-1] = v[j][k]
|
effect[2][k-1] = v[j][k]
|
||||||
|
@ -149,18 +142,6 @@ function Skill:Init(role, effectData)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Skill:Dispose()
|
|
||||||
local effectGroup
|
|
||||||
for i=1, self.effectList.size do
|
|
||||||
effectGroup = self.effectList.buffer[i]
|
|
||||||
for k=1, #effectGroup[3] do
|
|
||||||
effectPool:Put(effectGroup[3][k])
|
|
||||||
effectGroup[3][k] = nil
|
|
||||||
end
|
|
||||||
effectGroupPool:Put(effectGroup)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function Skill:ResetCD()
|
function Skill:ResetCD()
|
||||||
if not self.isTeamSkill then
|
if not self.isTeamSkill then
|
||||||
if self.owner.superSkill == self then
|
if self.owner.superSkill == self then
|
||||||
|
@ -196,6 +177,12 @@ function Skill:ResetCD()
|
||||||
BattleLogic.SetAggro(self.owner, 0)
|
BattleLogic.SetAggro(self.owner, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function takeEffect(type, caster, target, args, interval)
|
||||||
|
effect[type](caster, target, args, interval)
|
||||||
|
if BattleLogic.IsOpenBattleRecord then
|
||||||
|
BattleLogic.RecordEffect(caster, target, type, args, interval)
|
||||||
|
end
|
||||||
|
end
|
||||||
function Skill:Cast()
|
function Skill:Cast()
|
||||||
for i=1, self.effectList.size do
|
for i=1, self.effectList.size do
|
||||||
local effectGroup = self.effectList.buffer[i]
|
local effectGroup = self.effectList.buffer[i]
|
||||||
|
@ -217,7 +204,7 @@ function Skill:Cast()
|
||||||
for j=1, #arr do
|
for j=1, #arr do
|
||||||
for k=1, #effectGroup[3] do
|
for k=1, #effectGroup[3] do
|
||||||
local v = effectGroup[3][k]
|
local v = effectGroup[3][k]
|
||||||
effect[v[1]](self.owner, arr[j], v[2], duration)
|
takeEffect(v[1], self.owner, arr[j], v[2], duration)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif chooseId == 20000 then --敌方aoe
|
elseif chooseId == 20000 then --敌方aoe
|
||||||
|
@ -225,14 +212,14 @@ function Skill:Cast()
|
||||||
for j=1, #arr do
|
for j=1, #arr do
|
||||||
for k=1, #effectGroup[3] do
|
for k=1, #effectGroup[3] do
|
||||||
local v = effectGroup[3][k]
|
local v = effectGroup[3][k]
|
||||||
effect[v[1]](self.owner, arr[j], v[2], duration)
|
takeEffect(v[1], self.owner, arr[j], v[2], duration)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif nn == 1 or nn == 3 then
|
elseif nn == 1 or nn == 3 then
|
||||||
for j=1, #arr do
|
for j=1, #arr do
|
||||||
for k=1, #effectGroup[3] do
|
for k=1, #effectGroup[3] do
|
||||||
local v = effectGroup[3][k]
|
local v = effectGroup[3][k]
|
||||||
effect[v[1]](self.owner, arr[j], v[2], duration)
|
takeEffect(v[1], self.owner, arr[j], v[2], duration)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -252,7 +239,7 @@ function Skill:Cast()
|
||||||
r = arr[i]
|
r = arr[i]
|
||||||
for k=1, #effectGroup[3] do
|
for k=1, #effectGroup[3] do
|
||||||
local v = effectGroup[3][k]
|
local v = effectGroup[3][k]
|
||||||
effect[v[1]](self.owner, r, v[2], cd)
|
takeEffect(v[1], self.owner, r, v[2], cd)
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -265,7 +252,7 @@ function Skill:Cast()
|
||||||
self.choosedList:Add(r)
|
self.choosedList:Add(r)
|
||||||
for k=1, #effectGroup[3] do
|
for k=1, #effectGroup[3] do
|
||||||
local v = effectGroup[3][k]
|
local v = effectGroup[3][k]
|
||||||
effect[v[1]](self.owner, r, v[2], cd)
|
takeEffect(v[1], self.owner, r, v[2], cd)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
BattleLogic = {}
|
BattleLogic = {}
|
||||||
|
|
||||||
local floor = math.floor
|
local floor = math.floor
|
||||||
|
local min = math.min
|
||||||
|
local max = math.min
|
||||||
local objList = BattleDictionary.New()
|
local objList = BattleDictionary.New()
|
||||||
|
|
||||||
local skillList
|
|
||||||
|
|
||||||
local curUid
|
local curUid
|
||||||
local curBuffId
|
local curBuffId
|
||||||
local curFrame
|
local curFrame
|
||||||
|
@ -14,8 +14,6 @@ local enemyMP
|
||||||
|
|
||||||
local playerAggro
|
local playerAggro
|
||||||
local enemyAggro
|
local enemyAggro
|
||||||
local playerAggroChangable
|
|
||||||
local enemyAggroChangable
|
|
||||||
|
|
||||||
local playerSkillUsable
|
local playerSkillUsable
|
||||||
local enemySkillUsable
|
local enemySkillUsable
|
||||||
|
@ -74,8 +72,6 @@ function BattleLogic.Init(data, optionData)
|
||||||
|
|
||||||
BattleLogic.Clear()
|
BattleLogic.Clear()
|
||||||
|
|
||||||
skillList = {}
|
|
||||||
|
|
||||||
curUid = 0
|
curUid = 0
|
||||||
curBuffId = 0
|
curBuffId = 0
|
||||||
curFrame = 0
|
curFrame = 0
|
||||||
|
@ -86,9 +82,6 @@ function BattleLogic.Init(data, optionData)
|
||||||
playerTeamSkillIndex = 1
|
playerTeamSkillIndex = 1
|
||||||
enemyTeamSkillIndex = 1
|
enemyTeamSkillIndex = 1
|
||||||
|
|
||||||
playerAggroChangable = true
|
|
||||||
enemyAggroChangable = true
|
|
||||||
|
|
||||||
playerSkillUsable = true
|
playerSkillUsable = true
|
||||||
enemySkillUsable = true
|
enemySkillUsable = true
|
||||||
|
|
||||||
|
@ -147,9 +140,9 @@ end
|
||||||
|
|
||||||
function BattleLogic.AddMP(camp, mp)
|
function BattleLogic.AddMP(camp, mp)
|
||||||
if camp == 0 then
|
if camp == 0 then
|
||||||
playerMP = math.min(playerMP + mp, 100)
|
playerMP = min(playerMP + mp, 100)
|
||||||
else
|
else
|
||||||
enemyMP = math.min(playerMP + mp, 100)
|
enemyMP = min(playerMP + mp, 100)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -187,24 +180,12 @@ end
|
||||||
|
|
||||||
function BattleLogic.SetAggro(role, duration)
|
function BattleLogic.SetAggro(role, duration)
|
||||||
if role.camp == 1 then
|
if role.camp == 1 then
|
||||||
if playerAggroChangable then
|
playerAggro = role
|
||||||
playerAggro = role
|
if enemySkillUsable then
|
||||||
if enemySkillUsable then
|
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, role, max(duration/2, 0.3))
|
||||||
BattleLogic.Event:DispatchEvent(BattleEventName.ZoomChange, role, math.max(duration/2, 0.3))
|
|
||||||
end
|
|
||||||
playerAggroChangable = false
|
|
||||||
BattleLogic.WaitForTrigger(duration-BattleLogic.GameDeltaTime, function () --减去一帧避免卡点
|
|
||||||
playerAggroChangable = true
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if enemyAggroChangable then
|
enemyAggro = role
|
||||||
enemyAggro = role
|
|
||||||
enemyAggroChangable = false
|
|
||||||
BattleLogic.WaitForTrigger(duration-BattleLogic.GameDeltaTime, function () --减去一帧避免卡点
|
|
||||||
enemyAggroChangable = true
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -251,10 +232,15 @@ function BattleLogic.GetSkillUsable(camp)
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleLogic.WaitForTrigger(delayTime, action)
|
function BattleLogic.WaitForTrigger(delayTime, action)
|
||||||
|
delayTime = floor(delayTime * 100000 + 0.5) / 100000 --进行精度处理,避免前后端计算不一致
|
||||||
|
local delayFrame = floor(delayTime * BattleLogic.GameFrameRate + 0.5)
|
||||||
local item = actionPool:Get()
|
local item = actionPool:Get()
|
||||||
item[1] = curFrame + floor(delayTime * BattleLogic.GameFrameRate + 0.5)
|
item[1] = curFrame + delayFrame
|
||||||
item[2] = action
|
item[2] = action
|
||||||
tbActionList:Add(item)
|
tbActionList:Add(item)
|
||||||
|
if BattleLogic.IsOpenBattleRecord then
|
||||||
|
BattleLogic.RecordDelayTrigger(delayTime, curFrame + delayFrame)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleLogic.AddOption(opType, opArg)
|
function BattleLogic.AddOption(opType, opArg)
|
||||||
|
@ -283,12 +269,8 @@ function BattleLogic.CurFrame()
|
||||||
return curFrame
|
return curFrame
|
||||||
end
|
end
|
||||||
|
|
||||||
local list = {}
|
|
||||||
function BattleLogic.Query(func, inCludeDeadRole)
|
function BattleLogic.Query(func, inCludeDeadRole)
|
||||||
for i=1, #list do
|
local list = {}
|
||||||
list[i] = nil
|
|
||||||
end
|
|
||||||
--local list = {}
|
|
||||||
local index = 1
|
local index = 1
|
||||||
if func then
|
if func then
|
||||||
for i=1, objList.size do
|
for i=1, objList.size do
|
||||||
|
@ -362,9 +344,7 @@ function BattleLogic.Update()
|
||||||
index = 1
|
index = 1
|
||||||
while index <= tbActionList.size do
|
while index <= tbActionList.size do
|
||||||
if tbActionList.buffer[index][1] <= curFrame then
|
if tbActionList.buffer[index][1] <= curFrame then
|
||||||
if tbActionList.buffer[index][2] then
|
tbActionList.buffer[index][2]()
|
||||||
tbActionList.buffer[index][2]()
|
|
||||||
end
|
|
||||||
actionPool:Put(tbActionList.buffer[index])
|
actionPool:Put(tbActionList.buffer[index])
|
||||||
tbActionList:Remove(index)
|
tbActionList:Remove(index)
|
||||||
else
|
else
|
||||||
|
@ -460,6 +440,22 @@ function BattleLogic.RecordRoleProperty(uid, camp, name, value, delta)
|
||||||
table.insert(record, string.format("frame:%d, uid:%d, camp:%d, name:%s, value:%d, delta:%d", curFrame, uid, camp, name, value, delta))
|
table.insert(record, string.format("frame:%d, uid:%d, camp:%d, name:%s, value:%d, delta:%d", curFrame, uid, camp, name, value, delta))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Record专用
|
||||||
|
function BattleLogic.RecordEffect(caster, target, type, args, interval)
|
||||||
|
local cUid = tostring(caster.uid) or "cTeam"
|
||||||
|
local tUid = tostring(target.uid) or "tTeam"
|
||||||
|
local str = ""
|
||||||
|
for i=1, #args do
|
||||||
|
str = str..tostring(args[i]) .. (i == #args and "" or "#")
|
||||||
|
end
|
||||||
|
table.insert(record, string.format("frame:%d, caster:%s, target:%s, effectType:%d, args:%s, interval:%d", curFrame, cUid, tUid, type, str, interval))
|
||||||
|
end
|
||||||
|
|
||||||
|
--Record专用
|
||||||
|
function BattleLogic.RecordDelayTrigger(delayFrame, triggerFrame)
|
||||||
|
table.insert(record, string.format("frame:%d, delayTime:%f, triggerFrame:%d", curFrame, delayFrame, triggerFrame))
|
||||||
|
end
|
||||||
|
|
||||||
--Record专用
|
--Record专用
|
||||||
function BattleLogic.GenerateRecordFile()
|
function BattleLogic.GenerateRecordFile()
|
||||||
local time = string.format("%d-%d-%d-%d-%d-%d",
|
local time = string.format("%d-%d-%d-%d-%d-%d",
|
||||||
|
|
|
@ -175,6 +175,18 @@ function BattleUtil.RandomList(arr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function BattleUtil.Sort(arr, comp)
|
||||||
|
if #arr <= 1 then return arr end
|
||||||
|
for i=1, #arr do
|
||||||
|
for j = #arr, i+1, -1 do
|
||||||
|
if comp(arr[j-1], arr[j]) then
|
||||||
|
arr[j-1], arr[j] = arr[j], arr[j-1]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return arr
|
||||||
|
end
|
||||||
|
|
||||||
function BattleUtil.GetPropertyName(type)
|
function BattleUtil.GetPropertyName(type)
|
||||||
if type == 1 then
|
if type == 1 then
|
||||||
return RoleDataName.Strength
|
return RoleDataName.Strength
|
||||||
|
|
|
@ -11,19 +11,10 @@ local Passivity = require("Modules/Battle/Logic/Base/Passivity")
|
||||||
local skillPool = BattleObjectPool.New(function ()
|
local skillPool = BattleObjectPool.New(function ()
|
||||||
return Skill:New()
|
return Skill:New()
|
||||||
end)
|
end)
|
||||||
local buffPool = BattleObjectPool.New(function ()
|
|
||||||
return BuffManager.New()
|
|
||||||
end)
|
|
||||||
local eventPool = BattleObjectPool.New(function ()
|
|
||||||
return BattleEvent:New()
|
|
||||||
end)
|
|
||||||
local dataPool = BattleObjectPool.New(function ()
|
|
||||||
return RoleData.New()
|
|
||||||
end)
|
|
||||||
|
|
||||||
function RoleLogic.New()
|
function RoleLogic.New()
|
||||||
local instance = {uid=0,roleData=0,data=0,camp=0,name=0,roleType=0,shield=BattleList.New(),exCalDmgList=BattleList.New(),
|
local instance = {uid=0,roleData=0,data=RoleData.New(),camp=0,name=0,roleType=0,shield=BattleList.New(),exCalDmgList=BattleList.New(),
|
||||||
BuffMgr=0,Event=0,passiveList=0,isDead=false,Auto=false,IsDebug=false,enable=false}
|
BuffMgr=BuffManager.New(),Event=BattleEvent:New(),passiveList=0,isDead=false,Auto=false,IsDebug=false,enable=false}
|
||||||
setmetatable(instance, RoleLogic)
|
setmetatable(instance, RoleLogic)
|
||||||
return instance
|
return instance
|
||||||
end
|
end
|
||||||
|
@ -32,7 +23,6 @@ function RoleLogic:Init(uid, data)
|
||||||
self.uid = uid
|
self.uid = uid
|
||||||
self.roleData = data
|
self.roleData = data
|
||||||
|
|
||||||
self.data = dataPool:Get()
|
|
||||||
self.data:Init(self, data.property)
|
self.data:Init(self, data.property)
|
||||||
|
|
||||||
self.camp = data.camp --阵营 0:我方 1:敌方
|
self.camp = data.camp --阵营 0:我方 1:敌方
|
||||||
|
@ -42,10 +32,7 @@ function RoleLogic:Init(uid, data)
|
||||||
self.shield:Clear() --护盾列表
|
self.shield:Clear() --护盾列表
|
||||||
self.exCalDmgList:Clear() --额外计算伤害列表
|
self.exCalDmgList:Clear() --额外计算伤害列表
|
||||||
|
|
||||||
self.BuffMgr = buffPool:Get()
|
|
||||||
self.BuffMgr:Init(self)
|
self.BuffMgr:Init(self)
|
||||||
|
|
||||||
self.Event = eventPool:Get()
|
|
||||||
self.Event:ClearEvent()
|
self.Event:ClearEvent()
|
||||||
|
|
||||||
self.passiveList = {}
|
self.passiveList = {}
|
||||||
|
@ -84,16 +71,11 @@ function RoleLogic:AddBuff(buff)
|
||||||
end
|
end
|
||||||
|
|
||||||
function RoleLogic:Dispose()
|
function RoleLogic:Dispose()
|
||||||
eventPool:Put(self.Event)
|
|
||||||
dataPool:Put(self.data)
|
|
||||||
buffPool:Put(self.BuffMgr)
|
|
||||||
if self.skill then
|
if self.skill then
|
||||||
self.skill:Dispose()
|
|
||||||
skillPool:Put(self.skill)
|
skillPool:Put(self.skill)
|
||||||
self.skill = nil
|
self.skill = nil
|
||||||
end
|
end
|
||||||
if self.superSkill then
|
if self.superSkill then
|
||||||
self.superSkill:Dispose()
|
|
||||||
skillPool:Put(self.superSkill)
|
skillPool:Put(self.superSkill)
|
||||||
self.superSkill = nil
|
self.superSkill = nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,26 +26,14 @@ public class SAdventureConfig implements BaseConfig {
|
||||||
|
|
||||||
private int[] randomRewardGroup;
|
private int[] randomRewardGroup;
|
||||||
|
|
||||||
private int[] recommendRewardGroup;
|
private int[][] recommendRewardGroup;
|
||||||
|
|
||||||
private int pooId;
|
|
||||||
|
|
||||||
private Set<Integer> recommendHeroSets;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
|
|
||||||
Map<Integer, SAdventureConfig> config = STableManager.getConfig(SAdventureConfig.class);
|
sAdventureConfigMap = STableManager.getConfig(SAdventureConfig.class);
|
||||||
for(SAdventureConfig sAdventureConfig : config.values()){
|
|
||||||
int[] recommendHeroIds = sAdventureConfig.getRecommendHeroIds();
|
|
||||||
Set<Integer> recommendHeroSetTmp = new HashSet<>(recommendHeroIds.length);
|
|
||||||
for(int i=0;i<recommendHeroIds.length;i++){
|
|
||||||
recommendHeroSetTmp.add(recommendHeroIds[i]);
|
|
||||||
}
|
|
||||||
sAdventureConfig.setRecommendHeroSets(recommendHeroSetTmp);
|
|
||||||
}
|
|
||||||
sAdventureConfigMap = config;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,14 +45,6 @@ public class SAdventureConfig implements BaseConfig {
|
||||||
return sAdventureConfigMap;
|
return sAdventureConfigMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Integer> getRecommendHeroSets() {
|
|
||||||
return recommendHeroSets;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRecommendHeroSets(Set<Integer> recommendHeroSets) {
|
|
||||||
this.recommendHeroSets = recommendHeroSets;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -93,11 +73,8 @@ public class SAdventureConfig implements BaseConfig {
|
||||||
return randomRewardGroup;
|
return randomRewardGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int[] getRecommendRewardGroup() {
|
public int[][] getRecommendRewardGroup() {
|
||||||
return recommendRewardGroup;
|
return recommendRewardGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPooId() {
|
|
||||||
return pooId;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -57,7 +57,7 @@ public class SSkillLogicConfig implements BaseConfig {
|
||||||
return effect;
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getEffectValueIndex (int[][] effectArr,int value){
|
public int getEffectValueIndex (int[][] effectArr,int value, int index){
|
||||||
StringBuilder effectStr = new StringBuilder();
|
StringBuilder effectStr = new StringBuilder();
|
||||||
for (int[] effects :effectArr){
|
for (int[] effects :effectArr){
|
||||||
for (int eff :effects){
|
for (int eff :effects){
|
||||||
|
@ -73,14 +73,18 @@ public class SSkillLogicConfig implements BaseConfig {
|
||||||
for (int i =0 ; i < ints.length; i++){
|
for (int i =0 ; i < ints.length; i++){
|
||||||
map.put(i,ints[i]);
|
map.put(i,ints[i]);
|
||||||
}
|
}
|
||||||
int index = 0;
|
int backIndex = 0;
|
||||||
|
int flag = 0;
|
||||||
for (Map.Entry<Integer,Integer> entry : map.entrySet()){
|
for (Map.Entry<Integer,Integer> entry : map.entrySet()){
|
||||||
if (entry.getValue() == value){
|
if (entry.getValue() == value){
|
||||||
index = entry.getKey();
|
backIndex = entry.getKey();
|
||||||
break;
|
if (flag == index){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
flag++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return index;
|
return backIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public float[][] getEffectValue() {
|
public float[][] getEffectValue() {
|
||||||
|
@ -120,7 +124,7 @@ public class SSkillLogicConfig implements BaseConfig {
|
||||||
}else {
|
}else {
|
||||||
effectInfo.append("|").append(effects[i]);
|
effectInfo.append("|").append(effects[i]);
|
||||||
}
|
}
|
||||||
int index = getEffectValueIndex(effect, effects[i]);
|
int index = getEffectValueIndex(effect, effects[i], i );
|
||||||
float[] effectValue = effectValues[index];
|
float[] effectValue = effectValues[index];
|
||||||
for (float effectVal : effectValue) {
|
for (float effectVal : effectValue) {
|
||||||
effectInfo.append("#").append(effectVal);
|
effectInfo.append("#").append(effectVal);
|
||||||
|
|
|
@ -33,8 +33,11 @@ public class SVipLevelConfig implements BaseConfig {
|
||||||
for(int[] temp : privileges){
|
for(int[] temp : privileges){
|
||||||
privilegeMap.put(temp[0],temp[1]);
|
privilegeMap.put(temp[0],temp[1]);
|
||||||
}
|
}
|
||||||
|
sVipLevelConfig.setPrivilegeMap(privilegeMap);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sVipLevelConfigMap =config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<Integer, SVipLevelConfig> getsVipLevelConfigMap() {
|
public static Map<Integer, SVipLevelConfig> getsVipLevelConfigMap() {
|
||||||
|
@ -64,4 +67,8 @@ public class SVipLevelConfig implements BaseConfig {
|
||||||
public Map<Integer, Integer> getPrivilegeMap() {
|
public Map<Integer, Integer> getPrivilegeMap() {
|
||||||
return privilegeMap;
|
return privilegeMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPrivilegeMap(Map<Integer, Integer> privilegeMap) {
|
||||||
|
this.privilegeMap = privilegeMap;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -718,10 +718,26 @@ public class MapLogic {
|
||||||
LuaValue getOptionData = FightDataUtil.getOptionData(frames);
|
LuaValue getOptionData = FightDataUtil.getOptionData(frames);
|
||||||
|
|
||||||
int[] checkResult = CheckFight.getInstance().checkFight(seed, getFightData, getOptionData);
|
int[] checkResult = CheckFight.getInstance().checkFight(seed, getFightData, getOptionData);
|
||||||
|
|
||||||
|
List<Integer> remainHp = new ArrayList<>(5);
|
||||||
|
for (int i = 1; i < checkResult.length; i++) {
|
||||||
|
remainHp.add(checkResult[i]);
|
||||||
|
}
|
||||||
|
|
||||||
//校验结果码 1:胜利
|
//校验结果码 1:胜利
|
||||||
int resultCode = checkResult[0];
|
int resultCode = checkResult[0];
|
||||||
if (resultCode !=1){
|
if (resultCode == -1){
|
||||||
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "战斗失败");
|
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "战斗异常!");
|
||||||
|
return;
|
||||||
|
}else if(resultCode == 0){
|
||||||
|
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
|
||||||
|
FightInfoProto.FightEndResponse fightEndResponse = FightInfoProto.FightEndResponse
|
||||||
|
.newBuilder()
|
||||||
|
.setResult(resultCode)
|
||||||
|
.setDrop(dropBuilder)
|
||||||
|
.addAllRemainHpList(remainHp)
|
||||||
|
.build();
|
||||||
|
MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -732,15 +748,11 @@ public class MapLogic {
|
||||||
hero.setCurHp(checkResult[teamPosHeroInfo.getPosition()]);
|
hero.setCurHp(checkResult[teamPosHeroInfo.getPosition()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Integer> remainHp = new ArrayList<>(5);
|
|
||||||
for (int i = 1; i < checkResult.length; i++) {
|
|
||||||
remainHp.add(checkResult[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1);
|
CommonProto.Drop.Builder drop = ItemUtil.drop(user, sMonsterGroup.getRewardgroup(), 1, 1);
|
||||||
FightInfoProto.FightEndResponse fightEndResponse = FightInfoProto.FightEndResponse
|
FightInfoProto.FightEndResponse fightEndResponse = FightInfoProto.FightEndResponse
|
||||||
.newBuilder()
|
.newBuilder()
|
||||||
.setDrop(drop)
|
.setDrop(drop)
|
||||||
|
.setResult(resultCode)
|
||||||
.addAllRemainHpList(remainHp)
|
.addAllRemainHpList(remainHp)
|
||||||
.build();
|
.build();
|
||||||
MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse, true);
|
MessageUtil.sendMessage(session, 1, messageType.getNumber(), fightEndResponse, true);
|
||||||
|
|
|
@ -132,7 +132,8 @@ public class BehaviorUtil {
|
||||||
fightData.addAllMonsterList(monsterGroupList);
|
fightData.addAllMonsterList(monsterGroupList);
|
||||||
|
|
||||||
//设置战斗随机种子
|
//设置战斗随机种子
|
||||||
int seed = (int)(System.currentTimeMillis()/1000);
|
// int seed = (int)(System.currentTimeMillis()/1000);
|
||||||
|
int seed = 1553167956;
|
||||||
fightData.setFightSeed(seed);
|
fightData.setFightSeed(seed);
|
||||||
fightStartRespons.setFightData(fightData);
|
fightStartRespons.setFightData(fightData);
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,7 @@ public class CheckFight {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 单线程执行每次用时50ms,目前支持并发100以内,再大用线程池异步处理
|
* 单线程执行每次用时50ms,目前支持并发100以内,再大用线程池异步处理
|
||||||
|
* http://www.luaj.org/luaj/3.0/examples/jse/SampleMultiThreaded.java
|
||||||
* @param seed
|
* @param seed
|
||||||
* @param fightData
|
* @param fightData
|
||||||
* @param optionData
|
* @param optionData
|
||||||
|
@ -83,7 +84,7 @@ public class CheckFight {
|
||||||
if (status==1){
|
if (status==1){
|
||||||
for (int i = 1; i <= result.length(); i++) {
|
for (int i = 1; i <= result.length(); i++) {
|
||||||
resultCache[i] = result.rawget(i).toint();
|
resultCache[i] = result.rawget(i).toint();
|
||||||
LOGGER.info(i+" --> 单位剩余血量 : "+ resultCache[i]);
|
// LOGGER.info(i+" --> 单位剩余血量 : "+ resultCache[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resultCache;
|
return resultCache;
|
||||||
|
|
|
@ -154,8 +154,7 @@ public class CombatLogic {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pooId = sAdventureConfig.getPooId();
|
SAdventureSetting sAdventureSetting = SAdventureSetting.getsAdventureSetting(position);
|
||||||
SAdventureSetting sAdventureSetting = SAdventureSetting.getsAdventureSetting(pooId);
|
|
||||||
if(hourDuration > sAdventureSetting.getPerMapMaxHour()){
|
if(hourDuration > sAdventureSetting.getPerMapMaxHour()){
|
||||||
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"超出时长");
|
MessageUtil.sendErrorResponse(session,0, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,"超出时长");
|
||||||
return;
|
return;
|
||||||
|
@ -173,7 +172,7 @@ public class CombatLogic {
|
||||||
int allowTime =0;
|
int allowTime =0;
|
||||||
if(!adventureManager.getAllowTimeMap().containsKey(position)){
|
if(!adventureManager.getAllowTimeMap().containsKey(position)){
|
||||||
int vipLevel = user.getPlayerInfoManager().getVipLevel();
|
int vipLevel = user.getPlayerInfoManager().getVipLevel();
|
||||||
allowTime = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel).getPrivilegeMap().get(vipLevel) -hourDuration;
|
allowTime = SVipLevelConfig.getsVipLevelConfigMap().get(vipLevel).getPrivilegeMap().get(1) -hourDuration;
|
||||||
}else{
|
}else{
|
||||||
Integer remainAllowTime = adventureManager.getAllowTimeMap().get(position);
|
Integer remainAllowTime = adventureManager.getAllowTimeMap().get(position);
|
||||||
allowTime = remainAllowTime - hourDuration;
|
allowTime = remainAllowTime - hourDuration;
|
||||||
|
@ -196,7 +195,7 @@ public class CombatLogic {
|
||||||
HeroManager heroManager = user.getHeroManager();
|
HeroManager heroManager = user.getHeroManager();
|
||||||
int myRecommendHeroSize=0;
|
int myRecommendHeroSize=0;
|
||||||
int totalForce=0;
|
int totalForce=0;
|
||||||
Set<Integer> recommendHeroSets = sAdventureConfig.getRecommendHeroSets();
|
Set<Integer> recommendHeroSets =adventureSeasonInfoCache.getRecommendFinalHeroMap().get(position);
|
||||||
Set<Integer> cacheHeroTid = new HashSet<>(recommendHeroSets.size());
|
Set<Integer> cacheHeroTid = new HashSet<>(recommendHeroSets.size());
|
||||||
for(String heroId : heroIds){
|
for(String heroId : heroIds){
|
||||||
Hero hero = heroManager.getHero(heroId);
|
Hero hero = heroManager.getHero(heroId);
|
||||||
|
@ -208,7 +207,7 @@ public class CombatLogic {
|
||||||
totalForce += HeroLogic.getInstance().calHeoForce(user,hero);
|
totalForce += HeroLogic.getInstance().calHeoForce(user,hero);
|
||||||
}
|
}
|
||||||
|
|
||||||
adventureManager.station(new AdventureStateInfo(position,heroIds,(int)(System.currentTimeMillis()),hourDuration,totalForce,myRecommendHeroSize),allowTime);
|
adventureManager.station(new AdventureStateInfo(position,heroIds,(int)(System.currentTimeMillis()/1000),hourDuration,totalForce,myRecommendHeroSize),allowTime);
|
||||||
|
|
||||||
//发送成功
|
//发送成功
|
||||||
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,null,true);
|
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.ADVENTURE_STATION_RESPONSE_VALUE,null,true);
|
||||||
|
@ -235,8 +234,8 @@ public class CombatLogic {
|
||||||
SAdventureConfig sAdventureConfig = SAdventureConfig.getsAdventureConfigByPosition(position);
|
SAdventureConfig sAdventureConfig = SAdventureConfig.getsAdventureConfigByPosition(position);
|
||||||
int recommendForce = sAdventureConfig.getRecommendForce();
|
int recommendForce = sAdventureConfig.getRecommendForce();
|
||||||
|
|
||||||
int pooId = sAdventureConfig.getPooId();
|
|
||||||
SAdventureSetting sAdventureSetting = SAdventureSetting.getsAdventureSetting(pooId);
|
SAdventureSetting sAdventureSetting = SAdventureSetting.getsAdventureSetting(position);
|
||||||
|
|
||||||
|
|
||||||
float[][] baseRewardRatio = sAdventureSetting.getBaseRewardRatio();
|
float[][] baseRewardRatio = sAdventureSetting.getBaseRewardRatio();
|
||||||
|
@ -251,13 +250,20 @@ public class CombatLogic {
|
||||||
float baseRewardRatioTmp = calRatio(myForceRatio, baseRewardRatio) * hourRewardRatioTmp;
|
float baseRewardRatioTmp = calRatio(myForceRatio, baseRewardRatio) * hourRewardRatioTmp;
|
||||||
float randomRewardRatioTmp = calRatio(myForceRatio, randomRewardRatio) * hourRewardRatioTmp;
|
float randomRewardRatioTmp = calRatio(myForceRatio, randomRewardRatio) * hourRewardRatioTmp;
|
||||||
int[] baseRewardGroup = sAdventureConfig.getBaseRewardGroup();
|
int[] baseRewardGroup = sAdventureConfig.getBaseRewardGroup();
|
||||||
int[] recommendRewardGroup = sAdventureConfig.getRecommendRewardGroup();
|
int[][] recommendRewardGroup = sAdventureConfig.getRecommendRewardGroup();
|
||||||
int[] randomRewardGroup = sAdventureConfig.getRandomRewardGroup();
|
int[] randomRewardGroup = sAdventureConfig.getRandomRewardGroup();
|
||||||
Map<int[],Float> dropInfoMap = new HashMap<>();
|
Map<int[],Float> dropInfoMap = new HashMap<>();
|
||||||
dropInfoMap.put(baseRewardGroup,baseRewardRatioTmp);
|
dropInfoMap.put(baseRewardGroup,baseRewardRatioTmp);
|
||||||
dropInfoMap.put(randomRewardGroup,randomRewardRatioTmp);
|
dropInfoMap.put(randomRewardGroup,randomRewardRatioTmp);
|
||||||
if(myRecommendHeroSize>0){
|
if(myRecommendHeroSize>0){
|
||||||
dropInfoMap.put(new int[]{recommendRewardGroup[myRecommendHeroSize-1]},myRecommendHeroSize*1.0f);
|
int[] recommendRewardGroupDetail = recommendRewardGroup[myRecommendHeroSize - 1];
|
||||||
|
for(int i=0;i<recommendRewardGroupDetail.length;i=i+2){
|
||||||
|
int hourLimit = recommendRewardGroupDetail[i];
|
||||||
|
if(hourDuration<=hourLimit){
|
||||||
|
dropInfoMap.put(new int[]{recommendRewardGroupDetail[i+1]},1.0f);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropInfoMap);
|
CommonProto.Drop.Builder drop = ItemUtil.drop(user, dropInfoMap);
|
||||||
//清除占领
|
//清除占领
|
||||||
|
|
|
@ -741,6 +741,7 @@ public class HeroLogic {
|
||||||
|
|
||||||
public int calHeoForce(User user, Hero hero){
|
public int calHeoForce(User user, Hero hero){
|
||||||
Map<Integer, Integer> heroAllAttribute = calHeroFinalAttribute(user, hero);
|
Map<Integer, Integer> heroAllAttribute = calHeroFinalAttribute(user, hero);
|
||||||
|
heroAllAttribute.remove(0);
|
||||||
double result = 0;
|
double result = 0;
|
||||||
for(Map.Entry<Integer, Integer> item : heroAllAttribute.entrySet()){
|
for(Map.Entry<Integer, Integer> item : heroAllAttribute.entrySet()){
|
||||||
Integer propertyId = item.getKey();
|
Integer propertyId = item.getKey();
|
||||||
|
|
|
@ -84,7 +84,8 @@ public class CBean2Proto {
|
||||||
if(adventureStateInfo!=null){
|
if(adventureStateInfo!=null){
|
||||||
int startTime = adventureStateInfo.getStartTime();
|
int startTime = adventureStateInfo.getStartTime();
|
||||||
int now = (int)(System.currentTimeMillis()/1000);
|
int now = (int)(System.currentTimeMillis()/1000);
|
||||||
builder.setPositionId(adventureStateInfo.getPosition())
|
builder.addAllHeroIdList(adventureStateInfo.getHeroIds())
|
||||||
|
.setHourDuration(adventureStateInfo.getHourDuration())
|
||||||
.setRemainTime((now - startTime ));
|
.setRemainTime((now - startTime ));
|
||||||
}
|
}
|
||||||
return builder.build();
|
return builder.build();
|
||||||
|
|
Loading…
Reference in New Issue