diff options
author | Haru <haru@dotalux.com> | 2018-07-25 03:22:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-25 03:22:55 +0200 |
commit | ed988911d28ddfa64e1340389a818e94785f2cba (patch) | |
tree | c55c3c678469fe724c1e747f7670d75d11ff0539 | |
parent | 504ad2ca7d6ef4923093f74ac2afd5fc1bd39fd1 (diff) | |
parent | c64b3517fb085e34f6c3c2ab83a3290b1726fc95 (diff) | |
download | hercules-ed988911d28ddfa64e1340389a818e94785f2cba.tar.gz hercules-ed988911d28ddfa64e1340389a818e94785f2cba.tar.bz2 hercules-ed988911d28ddfa64e1340389a818e94785f2cba.tar.xz hercules-ed988911d28ddfa64e1340389a818e94785f2cba.zip |
Merge pull request #2136 from Asheraf/petevofix
Pet evolution bug fixes
-rw-r--r-- | sql-files/main.sql | 1 | ||||
-rw-r--r-- | sql-files/upgrades/2018-07-24--03-23.sql | 22 | ||||
-rw-r--r-- | sql-files/upgrades/index.txt | 1 | ||||
-rw-r--r-- | src/map/atcommand.c | 2 | ||||
-rw-r--r-- | src/map/clif.c | 1 | ||||
-rw-r--r-- | src/map/pet.c | 14 | ||||
-rw-r--r-- | src/map/script.c | 8 | ||||
-rw-r--r-- | src/map/skill.c | 3 |
8 files changed, 48 insertions, 4 deletions
diff --git a/sql-files/main.sql b/sql-files/main.sql index 8f7e5355b..d1c6364c6 100644 --- a/sql-files/main.sql +++ b/sql-files/main.sql @@ -895,6 +895,7 @@ INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1509835214); -- 2017-11-0 INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1519671456); -- 2018-02-26--15-57.sql INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1520654809); -- 2018-03-10--04-06.sql INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1528180320); -- 2018-06-05--12-02.sql +INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1532403228); -- 2018-07-24--03-23.sql -- -- Table structure for table `storage` -- diff --git a/sql-files/upgrades/2018-07-24--03-23.sql b/sql-files/upgrades/2018-07-24--03-23.sql new file mode 100644 index 000000000..64e29996f --- /dev/null +++ b/sql-files/upgrades/2018-07-24--03-23.sql @@ -0,0 +1,22 @@ +#1532403228 + +-- This file is part of Hercules. +-- http://herc.ws - http://github.com/HerculesWS/Hercules +-- +-- Copyright (C) 2018 Hercules Dev Team +-- +-- Hercules is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. + +UPDATE `inventory` SET `identify` = 1, `attribute` = 1 WHERE `card0` = -256 and `identify` = 0 +INSERT INTO `sql_updates` (`timestamp`) VALUES (1532403228); diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt index 5a737f93a..c88ba25d4 100644 --- a/sql-files/upgrades/index.txt +++ b/sql-files/upgrades/index.txt @@ -46,3 +46,4 @@ 2018-02-26--15-57.sql 2018-03-10--04-06.sql 2018-06-05--12-02.sql +2018-07-24--03-23.sql diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 79bd92213..3ec709b57 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -4222,6 +4222,8 @@ ACMD(repairall) count = 0; for (i = 0; i < MAX_INVENTORY; i++) { + if (sd->status.inventory[i].card[0] == CARD0_PET) + continue; if (sd->status.inventory[i].nameid && (sd->status.inventory[i].attribute & ATTR_BROKEN) != 0) { sd->status.inventory[i].attribute |= ATTR_BROKEN; sd->status.inventory[i].attribute ^= ATTR_BROKEN; diff --git a/src/map/clif.c b/src/map/clif.c index 2a2d87ccc..f222240e4 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7244,6 +7244,7 @@ static void clif_sendegg(struct map_session_data *sd) /// 3 = accessory /// 4 = performance (data = 1~3: normal, 4: special) /// 5 = hairstyle +/// 6 = close egg selection ui and update egg in inventory (PACKETVER >= 20180704) /// /// If sd is null, the update is sent to nearby objects, otherwise it is sent only to that player. static void clif_send_petdata(struct map_session_data *sd, struct pet_data *pd, int type, int param) diff --git a/src/map/pet.c b/src/map/pet.c index e544905c0..d1d8a5a33 100644 --- a/src/map/pet.c +++ b/src/map/pet.c @@ -345,10 +345,13 @@ static int pet_return_egg(struct map_session_data *sd, struct pet_data *pd) pd->pet.pet_id == MakeDWord(sd->status.inventory[i].card[1], sd->status.inventory[i].card[2])); if (i != MAX_INVENTORY) { - sd->status.inventory[i].identify = 1; + sd->status.inventory[i].attribute &= ~ATTR_BROKEN; sd->status.inventory[i].bound = IBT_NONE; } - +#if PACKETVER >= 20180704 + clif->inventorylist(sd); + clif->send_petdata(sd, pd, 6, 0); +#endif pd->pet.incubate = 1; unit->free(&pd->bl,CLR_OUTSIGHT); @@ -462,6 +465,9 @@ static int pet_birth_process(struct map_session_data *sd, struct s_pet *petinfo) clif->spawn(&sd->pd->bl); clif->send_petdata(sd,sd->pd, 0,0); clif->send_petdata(sd,sd->pd, 5,battle_config.pet_hair_style); +#if PACKETVER >= 20180704 + clif->send_petdata(sd, sd->pd, 6, 1); +#endif clif->send_petdata(NULL, sd->pd, 3, sd->pd->vd.head_bottom); clif->send_petstatus(sd); } @@ -496,8 +502,8 @@ static int pet_recv_petdata(int account_id, struct s_pet *p, int flag) if (!pet->birth_process(sd,p)) { - // Pet Evolution, Hide the egg by setting identify to 0 [Dastgir/Hercules] - sd->status.inventory[i].identify = 0; + // Pet Evolution, Hide the egg by setting broken attribute (0x2) [Asheraf] + sd->status.inventory[i].attribute |= ATTR_BROKEN; // bind the egg to the character to avoid moving it via forged packets [Asheraf] sd->status.inventory[i].bound = IBT_CHARACTER; } diff --git a/src/map/script.c b/src/map/script.c index 9a5d33604..1e635b622 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -9245,6 +9245,8 @@ static BUILDIN(getbrokenid) num=script_getnum(st,2); for(i=0; i<MAX_INVENTORY; i++) { + if (sd->status.inventory[i].card[0] == CARD0_PET) + continue; if ((sd->status.inventory[i].attribute & ATTR_BROKEN) != 0) { brokencounter++; if(num==brokencounter) { @@ -9270,6 +9272,8 @@ static BUILDIN(getbrokencount) return true; for (i = 0; i < MAX_INVENTORY; i++) { + if (sd->status.inventory[i].card[0] == CARD0_PET) + continue; if ((sd->status.inventory[i].attribute & ATTR_BROKEN) != 0) counter++; } @@ -9292,6 +9296,8 @@ static BUILDIN(repair) num=script_getnum(st,2); for(i=0; i<MAX_INVENTORY; i++) { + if (sd->status.inventory[i].card[0] == CARD0_PET) + continue; if ((sd->status.inventory[i].attribute & ATTR_BROKEN) != 0) { repaircounter++; if(num==repaircounter) { @@ -9320,6 +9326,8 @@ static BUILDIN(repairall) for(i = 0; i < MAX_INVENTORY; i++) { + if (sd->status.inventory[i].card[0] == CARD0_PET) + continue; if (sd->status.inventory[i].nameid && (sd->status.inventory[i].attribute & ATTR_BROKEN) != 0) { sd->status.inventory[i].attribute |= ATTR_BROKEN; diff --git a/src/map/skill.c b/src/map/skill.c index ed69b8c0f..524769873 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -16106,6 +16106,9 @@ static void skill_repairweapon(struct map_session_data *sd, int idx) if( item->nameid <= 0 || (item->attribute & ATTR_BROKEN) == 0 ) return; //Again invalid item.... + if (item->card[0] == CARD0_PET) + return; + if( sd != target_sd && !battle->check_range(&sd->bl,&target_sd->bl, skill->get_range2(&sd->bl, sd->menuskill_id,sd->menuskill_val2) ) ){ clif->item_repaireffect(sd,idx,1); return; |