瀏覽代碼

Merge branch 'master' into academie

Atemo 9 年之前
父節點
當前提交
9b13351817

+ 5 - 0
conf/battle/monster.conf

@@ -237,3 +237,8 @@ mob_size_influence: no
 // Default (most official): mob - 220, boss - 1
 mob_icewall_walk_block: 75
 boss_icewall_walk_block: 0
+
+// Should HP bars be shown for monsters?
+// 2012-04-04aRagexeRE or higher client required.
+monster_hp_bars_info: yes
+

+ 1 - 1
conf/msg_conf/map_msg.conf

@@ -423,7 +423,7 @@
 404: War of Emperium SE is currently in progress.
 405: War of Emperium SE has been ended.
 406: War of Emperium SE is currently not in progress.
-407: Invalid amount of parameters.
+//407 free
 //chrif related
 408: Need disconnection to perform change-sex request...
 409: Your sex has been changed (need disconnection by the server)...

+ 1 - 1
conf/msg_conf/map_msg_chn.conf

@@ -412,7 +412,7 @@
 404: 攻城戰第二版正在進行中
 405: 攻城戰第二版結束了
 406: 攻城戰第二版尚未開始
-407: Invalid amount of parameters.
+//407 free
 //chrif related
 408: 需要斷線以更改性別
 409: 你的性別已更改(你將會被伺服器中斷連線)

+ 1 - 1
conf/msg_conf/map_msg_frn.conf

@@ -420,7 +420,7 @@
 404: War of Emperium SE en cours.
 405: War of Emperium SE est terminée.
 406: War of Emperium SE n'est pas en cours.
-407: Invalid amount of parameters.
+//407 free
 //chrif related
 408: Besoin de vous déconnecter pour effectuer la demande de changement de sexe...
 409: Changement de sexe (le serveur a besoin de vous déconnecter)...

+ 1 - 1
conf/msg_conf/map_msg_grm.conf

@@ -403,7 +403,7 @@
 404: War of Emperium SE ist derzeitig im Gange.
 405: War of Emperium SE wurde Beendet.
 406: War of Emperium SE ist derzeitig nicht im Gange.
-407: Invalid amount of parameters.
+//407 free
 // Homunculus messages
 450: Du hast bereitz ein Homunculus
 

+ 1 - 1
conf/msg_conf/map_msg_idn.conf

@@ -423,7 +423,7 @@
 404: War of Emperium SE saat ini sedang berjalan.
 405: War of Emperium SE telah dimulai.
 406: War of Emperium SE saat ini sedang tidak berjalan.
-407: Invalid amount of parameters.
+//407 free
 //berkaitan dengan chrif
 408: Dibutuhkan pemutusan koneksi untuk melakukan permintaan ubah jenis kelamin ...
 409: Jenis kelaminmu telah diganti (membutuhkan pemutusan koneksi oleh server) ...

+ 1 - 1
conf/msg_conf/map_msg_por.conf

@@ -410,7 +410,7 @@
 404: A Guerra do Emperium SE já está em progresso.
 405: A Guerra do Emperium SE terminou!
 406: A Guerra do Emperium SE ainda não foi iniciada.
-407: Invalid amount of parameters.
+//407 free
 //Mensagens relacionadas ao chrif
 408: É preciso desconectar-se para que o pedido de mudança de sexo seja processado...
 409: O seu sexo foi alterado (é preciso desconectar-se do servidor)...

+ 1 - 1
conf/msg_conf/map_msg_rus.conf

@@ -420,7 +420,7 @@
 404: Война за Империум 2.0 уже идёт.
 405: Война за Империум 2.0 окончена.
 406: Война за Империум 2.0 в текущее время не идёт.
-407: Invalid amount of parameters.
+//407 free
 //chrif related
 408: Необходимо отключение для выполнения запроса на смену пола...
 409: Ваш пол был изменен (необходимо отключение от сервера)...

+ 1 - 1
conf/msg_conf/map_msg_spn.conf

@@ -411,7 +411,7 @@
 404: Hay una Guerra del Emperium de la 2ª edición en marcha.
 405: Ha finalizado la Guerra del Emperium de la 2ª edición.
 406: No hay ninguna Guerra del Emperium de la 2ª edición en marcha.
-407: Invalid amount of parameters.
+//407 free
 //Mensajes de chrif
 408: Necesitas desconectarte para realizar el cambio de sexo.
 409: Has cambiado de sexo (necesitas desconectarte y volver a entrar)

+ 1 - 1
conf/msg_conf/map_msg_tha.conf

@@ -418,7 +418,7 @@
 404: War of Emperium SE ∂턺㎎彖拈睾撫尸∏橘旅.
 405: War of Emperium SE 芽蟯뵀�.
 406: War of Emperium SE 幄巍닻롭㎾믹쬔嵬묄넓밌�.
-407: Invalid amount of parameters.
+//407 free
 //chrif related
 408: 들系둘뇟櫓夕羸皐듣滾묀櫓닒仙瀆⌒창梱뼜㏅안 ...
 409: ㅨ념닻沼큘宣휸촹쨘췌睾 (들系둘뇟櫓夕羸皐듣繫納奭惇荑璿稿�)...

+ 120 - 41
db/packet_db.txt

@@ -1895,9 +1895,10 @@ packet_keys: 0x3F094C49,0x55F86C1E,0x58AA359A // [Shakto]
 0x099b,8 //maptypeproperty2
 
 // New Packets
-0x08ff,24 // ZC_EFST_SET_ENTER
-0x0984,28 // ZC_EFST_SET_ENTER2
-0x099f,22 // ZC_SKILL_ENTRY4
+0x08C8,34	// ZC_NOTIFY_ACT3
+0x08ff,24 	// ZC_EFST_SET_ENTER
+0x0984,28 	// ZC_EFST_SET_ENTER2
+0x099f,22 	// ZC_SKILL_ENTRY4
 
 //2013-05-15aRagexe (Yommy)
 packet_ver: 35
@@ -2326,7 +2327,13 @@ packet_keys: 0x631C511C,0x111C111C,0x111C111C // [Shakto]
 0x09D6,-1,npcmarketpurchase,2:4:6
 0x09D7,-1
 0x09D8,2,npcmarketclosed,0
-0x09DF,7
+
+// New Packet
+0x097A,-1		// ZC_ALL_QUEST_LIST2
+0x09DB,-1		// ZC_NOTIFY_MOVEENTRY10
+0x09DC,-1		// ZC_NOTIFY_NEWENTRY10
+0x09DD,-1	// ZC_NOTIFY_STANDENTRY10
+0x09DF,7		// ZC_ACK_WHISPER02
 
 //2014-10-16Ragexe
 packet_ver: 50
@@ -2361,20 +2368,24 @@ packet_keys: 0x2DFF467C,0x444B37EE,0x2C1B634F // [YomRawr]
 0x0364,5,hommenu,2:4
 0x0936,36,storagepassword,0
 0x09DF,7
-0x0A00,269
-0x0A01,3,hotkeyrowshift,2
+
+// New packet
+0x0A00,269		// ZC_SHORTCUT_KEY_LIST_V3
+0x0A01,3,hotkeyrowshift,2	// CZ_SHORTCUTKEYBAR_ROTATE
+0x0A02,4			// ZC_DRESSROOM_OPEN
+0x09F7,75		// ZC_PROPERTY_HOMUN_2
 
 // Roulette System [Yommy]
-0x0A19,2,rouletteopen,0 // HEADER_CZ_REQ_OPEN_ROULETTE
-0x0A1A,23 // HEADER_ZC_ACK_OPEN_ROULETTE
-0x0A1B,2,rouletteinfo,0 // HEADER_CZ_REQ_ROULETTE_INFO
-0x0A1C,-1 // HEADER_ZC_ACK_ROULETTE_INFO
-0x0A1D,2,rouletteclose,0 // HEADER_CZ_REQ_CLOSE_ROULETTE
-0x0A1E,3 // HEADER_ZC_ACK_CLOSE_ROULETTE
-0x0A1F,2,roulettegenerate,0 // HEADER_CZ_REQ_GENERATE_ROULETTE
-0x0A20,21 // HEADER_ZC_ACK_GENERATE_ROULETTE
-0x0A21,3,rouletterecvitem,2 // HEADER_CZ_RECV_ROULETTE_ITEM
-0x0A22,5 // HEADER_ZC_RECV_ROULETTE_ITEM
+0x0A19,2,rouletteopen,0	// CZ_REQ_OPEN_ROULETTE
+0x0A1A,23 		// ZC_ACK_OPEN_ROULETTE
+0x0A1B,2,rouletteinfo,0 	// CZ_REQ_ROULETTE_INFO
+0x0A1C,-1 		// ZC_ACK_ROULETTE_INFO
+0x0A1D,2,rouletteclose,0 	// CZ_REQ_CLOSE_ROULETTE
+0x0A1E,3 			// ZC_ACK_CLOSE_ROULETTE
+0x0A1F,2,roulettegenerate,0 	// CZ_REQ_GENERATE_ROULETTE
+0x0A20,21 		// ZC_ACK_GENERATE_ROULETTE
+0x0A21,3,rouletterecvitem,2 	// CZ_RECV_ROULETTE_ITEM
+0x0A22,5 			// ZC_RECV_ROULETTE_ITEM
 
 //2014-10-22bRagexe
 packet_ver: 51
@@ -2410,30 +2421,98 @@ packet_keys: 0x290551EA,0x2B952C75,0x2D67669B // [YomRawr]
 0x094e,6,takeitem,2
 0x0955,18,bookingregreq,2:4:6
 0x096a,6,getcharnamerequest,2
-0x09e7,3
-0x09e8,11
-0x09ea,11
-0x09eb,-1
-0x09ed,3
-0x09ee,11
-0x09f1,11
-0x09f2,12
-0x09f3,11
-0x09f9,143
-0x0a03,2
-0x0a04,6
-0x0a05,49
-0x0a06,6
-0x0a07,9
-0x0a08,26
-0x0a09,45
-0x0a0a,47
-0x0a0b,47
-0x0a0c,56
-0x0a0d,-1
-0x0a13,26
-0x0A18,14			// HEADER_ZC_ACCEPT_ENTER3
-0x0a24,66
+
+// New Packet
+0x0A18,14		// ZC_ACCEPT_ENTER3
+0x0A23,-1		// ZC_ALL_ACH_LIST
+0x0A24,66	// ZC_ACH_UPDATE
+0x0A28,3		// ZC_ACK_OPENSTORE2
+0x09FD,-1		// ZC_NOTIFY_MOVEENTRY11
+0x09FE,-1		// ZC_NOTIFY_NEWENTRY11
+0x09FF,-1		// ZC_NOTIFY_STANDENTRY11
+//0x09F8,-1		// ZC_ALL_QUEST_LIST3
+
+//2015-05-13aRagexe
+packet_ver: 52
+packet_keys: 0x62C86D09,0x75944F17,0x112C133D // [YomRawr]
+0x0369,7,actionrequest,2:6
+0x083C,10,useskilltoid,2:4:6
+0x0437,5,walktoxy,2
+0x035F,6,ticksend,2
+0x0924,5,changedir,2:4
+0x0958,6,takeitem,2
+0x0885,6,dropitem,2:4
+0x0879,8,movetokafra,2:4
+0x0864,8,movefromkafra,2:4
+0x0438,10,useskilltopos,2:4:6:8
+0x0366,90,useskilltoposinfo,2:4:6:8:10
+0x096A,6,getcharnamerequest,2
+0x0368,6,solvecharname,2
+0x0838,12,searchstoreinfolistitemclick,2:6:10
+0x0835,2,searchstoreinfonextpage,0
+0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
+0x0811,-1,reqtradebuyingstore,2:4:8:12
+0x0360,6,reqclickbuyingstore,2
+0x022D,2,reqclosebuyingstore,0
+0x0815,-1,reqopenbuyingstore,2:4:8:9:89
+0x0883,18,bookingregreq,2:4:6
+// 0x02C4,8 CZ_JOIN_BATTLE_FIELD
+0x0960,-1, itemlistwindowselected,2:4:8:12
+0x0363,19,wanttoconnection,2:6:10:14:18
+0x094A,26,partyinvite2,2
+// 0x0927,4 CZ_GANGSI_RANK
+0x08A8,26,friendslistadd,2
+0x0817,5,hommenu,2:4
+0x0923,36,storagepassword,2:4:20
+
+// RODEX Mail system
+0x09E7,3		// ZC_NOTIFY_UNREADMAIL
+0x09E8,11,dull,0	// CZ_OPEN_MAILBOX
+0x09E9,2,dull,0 	// CZ_CLOSE_MAILBOX
+0x09EA,11,dull,0	// CZ_REQ_READ_MAIL
+0x09EB,-1		// ZC_ACK_READ_MAIL
+0x09EC,-1,dull,0	// CZ_REQ_WRITE_MAIL
+0x0A2E,6,dull,0 	// CZ_REQ_CHANGE_TITLE
+0x09ED,3		// ZC_ACK_WRITE_MAIL
+0x09EE,11,dull,0	// CZ_REQ_NEXT_MAIL_LIST
+0x09EF,11,dull,0 	// CZ_REQ_REFRESH_MAIL_LIST
+0x09F0,-1		// ZC_ACK_MAIL_LIST
+0x09F1,11,dull,0	// CZ_REQ_ZENY_FROM_MAIL
+0x09F2,12	// ZC_ACK_ZENY_FROM_MAIL
+0x09F3,11,dull,0	// CZ_REQ_ITEM_FROM_MAIL
+0x09F4,12	// ZC_ACK_ITEM_FROM_MAIL
+0x09F5,11,dull,0	// CZ_REQ_DELETE_MAIL
+0x09F6,11		// ZC_ACK_DELETE_MAIL
+0x0A03,2,dull,0	// CZ_REQ_CANCEL_WRITE_MAIL
+0x0A04,6,dull,0	// CZ_REQ_ADD_ITEM_TO_MAIL
+0x0A05,53	// ZC_ACK_ADD_ITEM_TO_MAIL
+0x0A06,6,dull,0	// CZ_REQ_REMOVE_ITEM_MAIL
+0x0A07,9		// ZC_ACK_REMOVE_ITEM_MAIL
+0x0A08,26,dull,0	// CZ_REQ_OPEN_WRITE_MAIL
+0x0A12,27	// ZC_ACK_OPEN_WRITE_MAIL
+0x0A32,2		// ZC_OPEN_RODEX_THROUGH_NPC_ONLY
+
+0x0A13,26,dull,0	// CZ_CHECK_RECEIVE_CHARACTER_NAME
+0x0A14,10		// ZC_CHECK_RECEIVE_CHARACTER_NAME
+
+// New EquipPackets Support
+0x0A09,45	// ZC_ADD_EXCHANGE_ITEM3
+0x0A0A,47	// ZC_ADD_ITEM_TO_STORE3
+0x0A0B,47	// ZC_ADD_ITEM_TO_CART3
+0x0A0C,56	// ZC_ITEM_PICKUP_ACK_V6
+0x0A0D,-1	// ZC_INVENTORY_ITEMLIST_EQUIP_V6
+0x0A0F,-1		// ZC_CART_ITEMLIST_EQUIP_V6
+0x0A10,-1		// ZC_STORE_ITEMLIST_EQUIP_V6
+0x0A2D,-1	// ZC_EQUIPWIN_MICROSCOPE_V6
+
+// Title System
+0x0A2E,6,dull,0	// CZ_REQ_CHANGE_TITLE
+0x0A2F,7		// ZC_ACK_CHANGE_TITLE
+0x0A30,106	// ZC_ACK_REQNAMEALL2
+
+// Pet Evolution System
+0x09FB,-1,dull,0	// CZ_PET_EVOLUTION
+0x09FC,6		// ZC_PET_EVOLUTION_RESULT
 
 //Add new packets here
-//packet_ver: 52
+//packet_ver: 53

+ 1 - 1
db/re/item_db.txt

@@ -9803,7 +9803,7 @@
 19751,C_Light_Darkness_Crown,Costume Light Darkness Crown,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,988,{},{},{}
 19752,C_Shelter_Wing_Ears,Costume Shelter Wing Ears,4,10,,300,,3,,0,0xFFFFFFFF,63,2,2048,,1,,990,{},{},{}
 19764,C_Monster_Card,Costume Monster Card,4,10,,0,,,,0,0xFFFFFFFF,63,2,4096,,,,526,{ bonus2 bExpAddRace,RC_All,10; },{},{}
-19765,C_Wing_Angels_Ears,Costume Wing Angels Ears,4,10,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,158,{ bonus2 bExpAddRace,RC_All,10; },{},{}
+19765,C_Wing_Angels_Ears,Costume Wing Angels Ears,4,10,,0,,,,0,0xFFFFFFFF,63,2,2048,,1,1,158,{ bonus2 bExpAddRace,RC_All,10; },{},{}
 19767,C_Home_Cherry_Blossom,Costume Home Cherry Blossom,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,602,{},{},{}
 19768,C_Sakura_Coronet,Costume Sakura Coronet,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,645,{},{},{}
 19772,C_Honeybee_Hat,Costume Honeybee Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,709,{},{},{}

+ 1 - 1
sql-files/item_db_re.sql

@@ -9834,7 +9834,7 @@ REPLACE INTO `item_db_re` VALUES (19750,'C_Saint_Frill_Ribbon','Costume Saint Fr
 REPLACE INTO `item_db_re` VALUES (19751,'C_Light_Darkness_Crown','Costume Light Darkness Crown',4,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,988,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19752,'C_Shelter_Wing_Ears','Costume Shelter Wing Ears',4,10,NULL,300,NULL,3,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',NULL,990,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19764,'C_Monster_Card','Costume Monster Card',4,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,4096,NULL,NULL,NULL,526,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
-REPLACE INTO `item_db_re` VALUES (19765,'C_Wing_Angels_Ears','Costume Wing Angels Ears',4,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,158,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (19765,'C_Wing_Angels_Ears','Costume Wing Angels Ears',4,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',1,158,'bonus2 bExpAddRace,RC_All,10;',NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19767,'C_Home_Cherry_Blossom','Costume Home Cherry Blossom',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,602,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19768,'C_Sakura_Coronet','Costume Sakura Coronet',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,645,NULL,NULL,NULL);
 REPLACE INTO `item_db_re` VALUES (19772,'C_Honeybee_Hat','Costume Honeybee Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,709,NULL,NULL,NULL);

+ 24 - 0
sql-files/upgrades/upgrade_20140612.sql

@@ -5,6 +5,30 @@ UPDATE `inventory` SET `card0` = 256 WHERE `card0` = -256;
 UPDATE `mail` SET `card0` = 256 WHERE `card0` = -256;
 UPDATE `storage` SET `card0` = 256 WHERE `card0` = -256;
 
+UPDATE `auction` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
+UPDATE `auction` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
+UPDATE `auction` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
+
+UPDATE `cart_inventory` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
+UPDATE `cart_inventory` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
+UPDATE `cart_inventory` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
+
+UPDATE `guild_storage` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
+UPDATE `guild_storage` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
+UPDATE `guild_storage` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
+
+UPDATE `inventory` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
+UPDATE `inventory` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
+UPDATE `inventory` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
+
+UPDATE `mail` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
+UPDATE `mail` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
+UPDATE `mail` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
+
+UPDATE `storage` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
+UPDATE `storage` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
+UPDATE `storage` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
+
 ALTER TABLE `auction` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
 ALTER TABLE `auction` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
 ALTER TABLE `auction` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';

+ 4 - 0
sql-files/upgrades/upgrade_20140612_log.sql

@@ -1,5 +1,9 @@
 UPDATE `picklog` SET `card0` = 256 WHERE `card0` = -256;
 
+UPDATE `picklog` SET `card1` = (65536 + `card1`) WHERE `card1` < 0 AND `card0` IN(254,255);
+UPDATE `picklog` SET `card2` = (65536 + `card2`) WHERE `card2` < 0 AND `card0` IN(254,255);
+UPDATE `picklog` SET `card3` = (65536 + `card3`) WHERE `card3` < 0 AND `card0` IN(254,255);
+
 ALTER TABLE `picklog` MODIFY `nameid` smallint(5) unsigned NOT NULL default '0';
 ALTER TABLE `picklog` MODIFY `card0` smallint(5) unsigned NOT NULL default '0';
 ALTER TABLE `picklog` MODIFY `card1` smallint(5) unsigned NOT NULL default '0';

+ 5 - 3
src/char/char_clif.c

@@ -369,11 +369,13 @@ void chclif_mmo_char_send(int fd, struct char_session_data* sd){
 	ShowInfo("sd->version = %d\n",sd->version);
 	if(sd->version >= date2version(20130000) ){
 		chclif_mmo_send082d(fd,sd);
+		chclif_mmo_send006b(fd,sd);
 		chclif_charlist_notify(fd,sd);
-		chclif_block_character(fd,sd);
-	}
+	} else
+		chclif_mmo_send006b(fd,sd);
 	//@FIXME dump from kro doesn't show 6b transmission
-	chclif_mmo_send006b(fd,sd);
+	if(sd->version >= date2version(20060819) )
+ 		chclif_block_character(fd,sd);
 }
 
 /*

+ 2 - 1
src/common/utils.c

@@ -382,7 +382,8 @@ uint32 date2version(int date) {
 	//else if(date < 20140613) return 47;
 	//else if(date < 20141016) return 48;
 	else if(date < 20141022) return 50;
-	else if(date >= 20141022) return 51;
+	else if(date < 20150513) return 51;
+	else if(date >= 20150513) return 52;
 
 	else return 30; //default
 }

+ 2 - 8
src/map/atcommand.c

@@ -578,10 +578,7 @@ ACMD_FUNC(jump)
 
 	memset(atcmd_output, '\0', sizeof(atcmd_output));
 
-	if (sscanf(message, "%6hd %6hd", &x, &y) != 2) {
-		clif_displaymessage(fd, msg_txt(sd,407));
-		return -1;
-	}
+	sscanf(message, "%6hd %6hd", &x, &y);
 
 	if (map[sd->bl.m].flag.noteleport && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
 		clif_displaymessage(fd, msg_txt(sd,248));	// You are not authorized to warp from your current map.
@@ -1145,10 +1142,7 @@ ACMD_FUNC(heal)
 	int hp = 0, sp = 0; // [Valaris] thanks to fov
 	nullpo_retr(-1, sd);
 
-	if (sscanf(message, "%11d %11d", &hp, &sp) != 2) {
-		clif_displaymessage(fd, msg_txt(sd,407));
-		return -1;
-	}
+	sscanf(message, "%11d %11d", &hp, &sp);
 
 	// some overflow checks
 	if( hp == INT_MIN ) hp++;

+ 1 - 0
src/map/battle.c

@@ -8175,6 +8175,7 @@ static const struct _battle_data {
 	{ "homunculus_evo_intimacy_reset",      &battle_config.homunculus_evo_intimacy_reset,   1000,   0,      INT_MAX,        },
 	{ "monster_loot_search_type",           &battle_config.monster_loot_search_type,        1,      0,      1,              },
 	{ "feature.roulette",                   &battle_config.feature_roulette,                1,      0,      1,              },
+	{ "monster_hp_bars_info",                &battle_config.monster_hp_bars_info,             1,      0,      1,              },
 };
 
 #ifndef STATS_OPT_OUT

+ 1 - 0
src/map/battle.h

@@ -591,6 +591,7 @@ extern struct Battle_Config
 	int homunculus_evo_intimacy_reset;
 	int monster_loot_search_type;
 	int feature_roulette;
+	int monster_hp_bars_info;
 } battle_config;
 
 void do_init_battle(void);

文件差異過大導致無法顯示
+ 356 - 172
src/map/clif.c


+ 3 - 1
src/map/clif.h

@@ -35,7 +35,7 @@ struct party_booking_ad_info;
 enum { // packet DB
 	MIN_PACKET_DB  = 0x064,
 	MAX_PACKET_DB  = 0xAFF,
-	MAX_PACKET_VER = 51,
+	MAX_PACKET_VER = 52,
 	MAX_PACKET_POS = 20,
 };
 
@@ -968,4 +968,6 @@ void clif_merge_item_open(struct map_session_data *sd);
 
 void clif_broadcast_obtain_special_item(const char *char_name, unsigned short nameid, unsigned short container, enum BROADCASTING_SPECIAL_ITEM_OBTAIN type, const char *srcname);
 
+void clif_dressing_room(struct map_session_data *sd, int view);
+
 #endif /* _CLIF_H_ */

+ 5 - 0
src/map/homunculus.c

@@ -514,6 +514,11 @@ int hom_levelup(struct homun_data *hd)
 
 	APPLY_HOMUN_LEVEL_STATWEIGHT();
 
+	// Needed to update skill list for mutated homunculus so unlocked skills will appear when the needed level is reached.
+	status_calc_homunculus(hd,0);
+	clif_hominfo(hd->master,hd,0);
+	clif_homskillinfoblock(hd->master);
+
 	if ( hd->master && battle_config.homunculus_show_growth ) {
 		char output[256] ;
 		sprintf(output,

+ 5 - 0
src/map/map.c

@@ -1783,6 +1783,11 @@ int map_quit(struct map_session_data *sd) {
 		status_change_end(&sd->bl, SC_READYCOUNTER, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_CBC, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_EQC, INVALID_TIMER);
+		// Remove visuals effect from headgear
+		status_change_end(&sd->bl, SC_MOONSTAR, INVALID_TIMER); 
+		status_change_end(&sd->bl, SC_SUPER_STAR, INVALID_TIMER); 
+		status_change_end(&sd->bl, SC_STRANGELIGHTS, INVALID_TIMER); 
+		status_change_end(&sd->bl, SC_DECORATION_OF_MUSIC, INVALID_TIMER); 
 		if (battle_config.debuff_on_logout&1) { //Remove negative buffs
 			status_change_end(&sd->bl, SC_ORCISH, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_STRIPWEAPON, INVALID_TIMER);

+ 2 - 2
src/map/mob.c

@@ -2176,7 +2176,7 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage)
 		return;
 
 #if PACKETVER >= 20120404
-	if( !(md->status.mode&MD_BOSS) ){
+	if( !(md->status.mode&MD_BOSS) && battle_config.monster_hp_bars_info){
 		int i;
 		for(i = 0; i < DAMAGELOG_SIZE; i++){ // must show hp bar to all char who already hit the mob.
 			struct map_session_data *sd = map_charid2sd(md->dmglog[i].id);
@@ -2957,7 +2957,7 @@ void mob_heal(struct mob_data *md,unsigned int heal)
 	if (battle_config.show_mob_info&3)
 		clif_charnameack (0, &md->bl);
 #if PACKETVER >= 20120404
-	if( !(md->status.mode&MD_BOSS) ){
+	if( !(md->status.mode&MD_BOSS) && battle_config.monster_hp_bars_info){
 		int i;
 		for(i = 0; i < DAMAGELOG_SIZE; i++)// must show hp bar to all char who already hit the mob.
 			if( md->dmglog[i].id ) {

+ 1 - 1
src/map/npc.h

@@ -107,7 +107,7 @@ enum actor_classes
 #define MAX_NPC_CLASS 1000
 // New NPC range
 #define MAX_NPC_CLASS2_START 10000
-#define MAX_NPC_CLASS2_END 10114
+#define MAX_NPC_CLASS2_END 10174
 
 //Checks if a given id is a valid npc id. [Skotlex]
 //Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001)

+ 11 - 0
src/map/pc.c

@@ -536,6 +536,17 @@ void pc_rental_expire(struct map_session_data *sd, int i)
 			}
 			break;
 	}
+
+	// Remove visuals effect from headgear
+	if( &sd->sc && sd->sc.data[SC_MOONSTAR] )
+		status_change_end(&sd->bl, SC_MOONSTAR, INVALID_TIMER);
+	if( &sd->sc && sd->sc.data[SC_SUPER_STAR] )
+		status_change_end(&sd->bl, SC_SUPER_STAR, INVALID_TIMER);
+	if( &sd->sc && sd->sc.data[SC_DECORATION_OF_MUSIC] )
+		status_change_end(&sd->bl, SC_DECORATION_OF_MUSIC, INVALID_TIMER);
+	if( &sd->sc && sd->sc.data[SC_STRANGELIGHTS] )
+		status_change_end(&sd->bl, SC_STRANGELIGHTS, INVALID_TIMER);
+
 	clif_rental_expired(sd->fd, i, sd->status.inventory[i].nameid);
 	pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_OTHER);
 }

+ 3 - 1
src/map/script.c

@@ -8408,7 +8408,7 @@ BUILDIN_FUNC(getequipid)
 	if( i < 0 )
 	{
 		script_pushint(st,-1);
-		return SCRIPT_CMD_FAILURE;
+		return SCRIPT_CMD_SUCCESS;
 	}
 
 	item = sd->inventory_data[i];
@@ -11168,6 +11168,8 @@ BUILDIN_FUNC(getstatus)
 				if( timer )
 				{// return the amount of time remaining
 					script_pushint(st, timer->tick - gettick());
+				} else {
+					script_pushint(st, -1);
 				}
 			}
 			break;

+ 11 - 11
src/map/skill.c

@@ -13611,42 +13611,42 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
 					case UNT_ZENKAI_WATER:
 						switch (rnd()%2 + 1) {
 							case 1:
-								sc_start(ss, bl, SC_FREEZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
+								sc_start(ss, bl, SC_FREEZE, sg->val1*5, sg->skill_lv, skill_get_time(sg->skill_id, sg->skill_lv));
 								break;
 							case 2:
-								sc_start(ss, bl, SC_FREEZING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
+								sc_start(ss, bl, SC_FREEZING, sg->val1*5, sg->skill_lv, skill_get_time(sg->skill_id, sg->skill_lv));
 								break;
 						}
 						break;
 					case UNT_ZENKAI_LAND:
 						switch (rnd()%2 + 1) {
 							case 1:
-								sc_start2(ss, bl, SC_STONE, sg->val1*5, sg->skill_lv, ss->id, skill_get_time2(sg->skill_id, sg->skill_lv));
+								sc_start2(ss, bl, SC_STONE, sg->val1*5, sg->skill_lv, ss->id, skill_get_time(sg->skill_id, sg->skill_lv));
 								break;
 							case 2:
-								sc_start2(ss, bl, SC_POISON, sg->val1*5, sg->skill_lv, ss->id, skill_get_time2(sg->skill_id, sg->skill_lv));
+								sc_start2(ss, bl, SC_POISON, sg->val1*5, sg->skill_lv, ss->id, skill_get_time(sg->skill_id, sg->skill_lv));
 								break;
 						}
 						break;
 					case UNT_ZENKAI_FIRE:
-						sc_start4(ss, bl, SC_BURNING, sg->val1*5, sg->skill_lv, 1000, ss->id, 0, skill_get_time2(sg->skill_id, sg->skill_lv));
+						sc_start4(ss, bl, SC_BURNING, sg->val1*5, sg->skill_lv, 1000, ss->id, 0, skill_get_time(sg->skill_id, sg->skill_lv));
 						break;
 					case UNT_ZENKAI_WIND:
 						switch (rnd()%3 + 1) {
 							case 1:
-								sc_start(ss, bl, SC_SLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
+								sc_start(ss, bl, SC_SLEEP, sg->val1*5, sg->skill_lv, skill_get_time(sg->skill_id, sg->skill_lv));
 								break;
 							case 2:
-								sc_start(ss, bl, SC_SILENCE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
+								sc_start(ss, bl, SC_SILENCE, sg->val1*5, sg->skill_lv, skill_get_time(sg->skill_id, sg->skill_lv));
 								break;
 							case 3:
-								sc_start(ss, bl, SC_DEEPSLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
+								sc_start(ss, bl, SC_DEEPSLEEP, sg->val1*5, sg->skill_lv, skill_get_time(sg->skill_id, sg->skill_lv));
 								break;
 						}
 						break;
 				}
 			} else
-				sc_start2(ss, bl,type,100,sg->val1,sg->val2,skill_get_time2(sg->skill_id, sg->skill_lv));
+				sc_start2(ss, bl,type,100,sg->val1,sg->val2,skill_get_time(sg->skill_id, sg->skill_lv));
 			break;
 
 		case UNT_LAVA_SLIDE:
@@ -15897,11 +15897,11 @@ int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, uint16
 		if (sc->data[SC_POEMBRAGI])
 			reduce_cast_rate += sc->data[SC_POEMBRAGI]->val2;
 		if (sc->data[SC_IZAYOI])
-			VARCAST_REDUCTION(-50);
+			VARCAST_REDUCTION(50);
 		if (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 3 && skill_get_type(skill_id) == BF_MAGIC && skill_get_ele(skill_id, skill_lv) == ELE_WATER)
 			VARCAST_REDUCTION(30); //Reduces 30% Variable Cast Time of magic Water spells.
 		if (sc->data[SC_TELEKINESIS_INTENSE])
-			VARCAST_REDUCTION(sc->data[SC_TELEKINESIS_INTENSE]->val4);
+			VARCAST_REDUCTION(sc->data[SC_TELEKINESIS_INTENSE]->val2);
 		// Multiplicative Fixed CastTime values
 		if (sc->data[SC_SECRAMENT])
 			fixcast_r = max(fixcast_r, sc->data[SC_SECRAMENT]->val2);

+ 5 - 3
src/map/status.c

@@ -823,6 +823,8 @@ void initChangeTables(void)
 	set_sc_with_vfx_noskill( SC_MOONSTAR	, SI_MOONSTAR	, SCB_NONE );
 	set_sc_with_vfx_noskill( SC_SUPER_STAR	, SI_SUPER_STAR	, SCB_NONE );
 	set_sc_with_vfx_noskill( SC_ALL_RIDING	, SI_ALL_RIDING	, SCB_SPEED );
+	set_sc_with_vfx_noskill( SC_STRANGELIGHTS	, SI_STRANGELIGHTS	, SCB_NONE );
+	set_sc_with_vfx_noskill( SC_DECORATION_OF_MUSIC		, SI_DECORATION_OF_MUSIC		, SCB_NONE );
 
 	/* Storing the target job rather than simply SC_SPIRIT simplifies code later on */
 	SkillStatusChangeTable[skill_get_index(SL_ALCHEMIST)]	= (sc_type)MAPID_ALCHEMIST,
@@ -5622,7 +5624,7 @@ static signed short status_calc_critical(struct block_list *bl, struct status_ch
 		return cap_value(critical,10,SHRT_MAX);
 
 	if (sc->data[SC_INCCRI])
-		critical += sc->data[SC_INCCRI]->val1;
+		critical += sc->data[SC_INCCRI]->val2;
 	if (sc->data[SC_CRIFOOD])
 		critical += sc->data[SC_CRIFOOD]->val1;
 	if (sc->data[SC_EXPLOSIONSPIRITS])
@@ -7714,7 +7716,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 	if( !sc )
 		return 0; // Unable to receive status changes
 
-	if( status_isdead(bl) && type != SC_NOCHAT ) // SC_NOCHAT should work even on dead characters
+	if( status_isdead(bl) && ( type != SC_NOCHAT && type != SC_JAILED ) ) // SC_NOCHAT and SC_JAILED should work even on dead characters
 		return 0;
 
 	if( bl->type == BL_MOB) {
@@ -10122,7 +10124,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			val4 = tick / tick_time;
 			break;
 		case SC_TELEKINESIS_INTENSE:
-			val2 = val4 = 10 * val1; // sp consum / casttime reduc %
+			val2 = 10 * val1; // sp consum / casttime reduc %
 			val3 = 40 * val1; // magic dmg bonus
 			break;
 		case SC_OFFERTORIUM:

部分文件因文件數量過多而無法顯示