summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/battle.c27
-rw-r--r--src/map/map.h6
-rw-r--r--src/map/pc.c7
3 files changed, 37 insertions, 3 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index a83df2ba8..7c2090b6b 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -3866,6 +3866,33 @@ static struct Damage battle_calc_pc_weapon_attack(
}
/* End addition */
+ // for azoth weapon [Valaris]
+ if(src->type == BL_PC && target->type == BL_MOB && sd->classchange) {
+ if(rand()%10000 < sd->classchange) {
+ int changeclass[]={
+ 1001,1002,1004,1005,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1018,1019,1020,
+ 1021,1023,1024,1025,1026,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1040,1041,
+ 1042,1044,1045,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1060,1061,
+ 1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1076,1077,1078,1079,1080,1081,1083,
+ 1084,1085,1094,1095,1097,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,
+ 1111,1113,1114,1116,1117,1118,1119,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,
+ 1131,1132,1133,1134,1135,1138,1139,1140,1141,1142,1143,1144,1145,1146,1148,1149,1151,
+ 1152,1153,1154,1155,1156,1158,1160,1161,1163,1164,1165,1166,1167,1169,1170,1174,1175,
+ 1176,1177,1178,1179,1180,1182,1183,1184,1185,1188,1189,1191,1192,1193,1194,1195,1196,
+ 1197,1199,1200,1201,1202,1204,1205,1206,1207,1208,1209,1211,1212,1213,1214,1215,1216,
+ 1219,1242,1243,1245,1246,1247,1248,1249,1250,1253,1254,1255,1256,1257,1258,1260,1261,
+ 1263,1264,1265,1266,1267,1269,1270,1271,1273,1274,1275,1276,1277,1278,1280,1281,1282,
+ 1291,1292,1293,1294,1295,1297,1298,1300,1301,1302,1304,1305,1306,1308,1309,1310,1311,
+ 1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1364,1365,1366,1367,1368,1369,
+ 1370,1371,1372,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,
+ 1390,1391,1392,1400,1401,1402,1403,1404,1405,1406,1408,1409,1410,1412,1413,1415,1416,
+ 1417,1493,1494,1495,1497,1498,1499,1500,1502,1503,1504,1505,1506,1507,1508,1509,1510,
+ 1511,1512,1513,1514,1515,1516,1517,1519,1520,1582,1584,1585,1586,1587 };
+ mob_class_change(((struct mob_data *)target),changeclass);
+ }
+ }
+
+
// -- moonsoul (final combination of phys, mag damage for ASC_BREAKER)
if(skill_num == ASC_BREAKER) {
damage += damage3;
diff --git a/src/map/map.h b/src/map/map.h
index 1d0e6b900..f54579ea2 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -266,7 +266,9 @@ struct map_session_data {
int random_attack_increase_add,random_attack_increase_per; // [Valaris]
int perfect_hiding; // [Valaris]
int unbreakable;
+ int classchange; // [Valaris]
+
int die_counter;
short doridori_counter;
@@ -578,8 +580,8 @@ enum {
SP_SPLASH_RANGE,SP_SPLASH_ADD_RANGE,SP_AUTOSPELL,SP_HP_DRAIN_RATE,SP_SP_DRAIN_RATE, // 1058-1062
SP_SHORT_WEAPON_DAMAGE_RETURN,SP_LONG_WEAPON_DAMAGE_RETURN,SP_WEAPON_COMA_ELE,SP_WEAPON_COMA_RACE, // 1063-1066
SP_ADDEFF2,SP_BREAK_WEAPON_RATE,SP_BREAK_ARMOR_RATE,SP_ADD_STEAL_RATE, // 1067-1070
- SP_MAGIC_DAMAGE_RETURN,SP_RANDOM_ATTACK_INCREASE,SP_ALL_STATS,SP_AGI_VIT,SP_AGI_DEX_STR,SP_PERFECT_HIDE, // 1071-1077
- SP_DISGUISE, // 1077
+ SP_MAGIC_DAMAGE_RETURN,SP_RANDOM_ATTACK_INCREASE,SP_ALL_STATS,SP_AGI_VIT,SP_AGI_DEX_STR,SP_PERFECT_HIDE, // 1071-1076
+ SP_DISGUISE,SP_CLASSCHANGE, // 1077-1078
SP_RESTART_FULL_RECORVER=2000,SP_NO_CASTCANCEL,SP_NO_SIZEFIX,SP_NO_MAGIC_DAMAGE,SP_NO_WEAPON_DAMAGE,SP_NO_GEMSTONE, // 2000-2005
SP_NO_CASTCANCEL2,SP_INFINITE_ENDURE,SP_UNBREAKABLE_WEAPON,SP_UNBREAKABLE_ARMOR // 2006-2009
diff --git a/src/map/pc.c b/src/map/pc.c
index 799fc2f59..b2fb1e120 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -2436,6 +2436,11 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
sd->unbreakable += val;
}
break;
+ case SP_CLASSCHANGE: // [Valaris]
+ if(sd->state.lr_flag !=2){
+ sd->classchange=val;
+ }
+ break;
default:
if(battle_config.error_log)
printf("pc_bonus: unknown type %d %d !\n",type,val);
@@ -2620,8 +2625,8 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
if(sd->state.lr_flag !=2){
sd->random_attack_increase_add = type2;
sd->random_attack_increase_per += val;
+ }
break;
- } // end addition
default:
if(battle_config.error_log)
printf("pc_bonus2: unknown type %d %d %d!\n",type,type2,val);