From 89a33a77ad47da523828d1156c2f68d1d2e561ee Mon Sep 17 00:00:00 2001 From: aleos89 Date: Tue, 8 Dec 2015 14:38:55 -0500 Subject: [PATCH] Updated Genetic Sling Item effects * Moved all item effects to source. * Updated HP/SP Increase Potions to use the official statuses. * Updated Vellum Flail to use the official status instead of Critical Wound. Thanks to @exneval. --- db/pre-re/item_db.txt | 58 ++++++------- db/re/item_db.txt | 60 ++++++------- doc/item_bonus.txt | 2 + src/map/map.h | 1 + src/map/pc.c | 39 ++++++--- src/map/pc.h | 2 +- src/map/script.c | 7 ++ src/map/skill.c | 192 +++++++++++++++++++++++++++++++++--------- src/map/status.c | 64 ++++++++++++-- src/map/status.h | 6 ++ 10 files changed, 311 insertions(+), 120 deletions(-) diff --git a/db/pre-re/item_db.txt b/db/pre-re/item_db.txt index 9657c6bbb7..4ce5beca1c 100644 --- a/db/pre-re/item_db.txt +++ b/db/pre-re/item_db.txt @@ -4983,12 +4983,12 @@ 12419,Mana_Plus,Mana Plus,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MANA_PLUS,500000,50; },{},{} 12420,Stamina_Up_M,Stamina Up M,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MUSTLE_M,500000,5; },{},{} 12421,Falmons_F,Falmons F,3,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_LIFE_FORCE_F,500000,5; },{},{} -12422,HP_Increase_Potion_(Small),HP Increase Potion (Small),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMHP,500000,(500+(BaseLevel*10/3)); percentheal 1,0; },{},{} -12423,HP_Increase_Potion_(Medium),HP Increase Potion (Medium),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMHP,500000,(1500+(BaseLevel*10/3)); percentheal 2,0; },{},{} -12424,HP_Increase_Potion_(Large),HP Increase Potion (Large),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMHP,500000,(2500+(BaseLevel*10/3)); percentheal 5,0; },{},{} -12425,SP_Increase_Potion_(Small),SP Increase Potion (Small),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMSPRATE,500000,((BaseLevel/10)-5); percentheal 0,2; },{},{} -12426,SP_Increase_Potion_(Medium),SP Increase Potion (Medium),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMSPRATE,500000,(BaseLevel/10); percentheal 0,4; },{},{} -12427,SP_Increase_Potion_(Large),SP Increase Potion (Large),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMSPRATE,500000,((BaseLevel/10)+5); percentheal 0,8; },{},{} +12422,HP_Increase_Potion_(Small),HP Increase Potion (Small),2,100,,20,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,1; percentheal 1,0; },{},{} +12423,HP_Increase_Potion_(Medium),HP Increase Potion (Medium),2,100,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,2; percentheal 2,0; },{},{} +12424,HP_Increase_Potion_(Large),HP Increase Potion (Large),2,100,,80,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,3; percentheal 5,0; },{},{} +12425,SP_Increase_Potion_(Small),SP Increase Potion (Small),2,100,,20,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,1; percentheal 0,2; },{},{} +12426,SP_Increase_Potion_(Medium),SP Increase Potion (Medium),2,100,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,2; percentheal 0,4; },{},{} +12427,SP_Increase_Potion_(Large),SP Increase Potion (Large),2,100,,80,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,3; percentheal 0,8; },{},{} 12428,Concentrated_White_Potion_Z,Concentrated White Potion Z,0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; heal 1000,0; },{},{} 12429,Savage_Full_Roast,Savage Full Roast,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SAVAGE_STEAK,300000,20; },{},{} 12430,Cocktail_Warg_Blood,Cocktail Warg Blood,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_COCKTAIL_WARG_BLOOD,300000,20; },{},{} @@ -5449,29 +5449,29 @@ 13265,Black_Lump,Black Lump,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} 13266,Black_Hard_Lump,Hard Black Lump,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} 13267,Very_Hard_Lump,Extremely Hard Black Lump,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} -13268,Mysterious_Powder,Mysterious Powder,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_MYSTERIOUS_POWDER,10000,2; },{},{} -13269,Boost500_To_Throw,Throwing Boost 500,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_BOOST500,500000,10; },{},{} -13270,Full_SwingK_To_Throw,Throwing Full Swing K,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_FULL_SWING_K,500000,50; },{},{} -13271,Mana_Plus_To_Throw,Throwing Mana Plus,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_MANA_PLUS,500000,50; },{},{} -13272,Cure_Free_To_Throw,Throwing Cure Free,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_end SC_BLEEDING; sc_end SC_CURSE; sc_end SC_SILENCE; sc_end SC_POISON; sc_end SC_ORCISH; sc_end SC_CHANGEUNDEAD; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_DPOISON; itemheal 500,0; },{},{} -13273,Stamina_Up_M_To_Throw,Throwing Muramura M,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_MUSTLE_M,500000,5; },{},{} -13274,Digestive_F_To_Throw,Throwing Falmons F,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_LIFE_FORCE_F,500000,5; },{},{} -13275,HP_Inc_PotS_To_Throw,Throwing Increase HP Potion (Small),10,100,,20,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_INCMHP,500000,(500+(BaseLevel*10/3)); percentheal 1,0; },{},{} -13276,HP_Inc_PotM_To_Throw,Throwing Increase HP Potion (Medium),10,100,,40,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_INCMHP,500000,(1500+(BaseLevel*10/3)); percentheal 2,0; },{},{} -13277,HP_Inc_PotL_To_Throw,Throwing Increase HP Potion (Large),10,100,,80,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_INCMHP,500000,(2500+(BaseLevel*10/3)); percentheal 5,0; },{},{} -13278,SP_Inc_PotS_To_Throw,Throwing Increase SP Potion (Small),10,100,,20,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_INCMSP,500000,((BaseLevel/10)-5); percentheal 0,2; },{},{} -13279,SP_Inc_PotM_To_Throw,Throwing Increase SP Potion (Medium),10,100,,40,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_INCMSP,500000,((BaseLevel/10)); percentheal 0,4; },{},{} -13280,SP_Inc_PotL_To_Throw,Throwing Increase SP Potion (Large),10,100,,80,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_INCMSP,500000,((BaseLevel/10)+5); percentheal 0,8; },{},{} -13281,En_White_PotZ_To_Throw,Throwing Concentrated White Potion Z,10,100,,70,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; itemheal 1000,0; },{},{} -13282,Vitata500_To_Throw,Throwing Vitata 500,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start2 SC_VITATA_500,500000,20,5; itemheal 0,200; },{},{} -13283,En_Cel_Juice_To_Throw,Throwing Ceromain Soup,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_EXTRACT_SALAMINE_JUICE,500000,10; },{},{} -13284,Savage_BBQ_To_Throw,Throwing Savage Full Roast,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_SAVAGE_STEAK,300000,20; },{},{} -13285,Wug_Cocktail_To_Throw,Throwing Cocktail Warg Blood,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_COCKTAIL_WARG_BLOOD,300000,20; },{},{} -13286,M_Brisket_To_Throw,Throwing Minor Stew,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_MINOR_BBQ,300000,20; },{},{} -13287,Siroma_Icetea_To_Throw,Throwing Siroma Iced Tea,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_SIROMA_ICE_TEA,300000,20; },{},{} -13288,Drocera_Stew_To_Throw,Throwing Drosera Herb Salad,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_DROCERA_HERB_STEAMED,300000,20; },{},{} -13289,Petti_Noodle_To_Throw,Throwing Petite Tail Soup,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_PUTTI_TAILS_NOODLES,300000,20; },{},{} -13290,Black_Thing_To_Throw,Throwing Black Mass,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{ sc_start SC_STOMACHACHE,60000,rand(5,10); },{},{} +13268,Mysterious_Powder,Mysterious Powder,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13269,Boost500_To_Throw,Throwing Boost 500,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13270,Full_SwingK_To_Throw,Throwing Full Swing K,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13271,Mana_Plus_To_Throw,Throwing Mana Plus,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13272,Cure_Free_To_Throw,Throwing Cure Free,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13273,Stamina_Up_M_To_Throw,Throwing Muramura M,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13274,Digestive_F_To_Throw,Throwing Falmons F,10,100,,10,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13275,HP_Inc_PotS_To_Throw,Throwing Increase HP Potion (Small),10,100,,20,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13276,HP_Inc_PotM_To_Throw,Throwing Increase HP Potion (Medium),10,100,,40,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13277,HP_Inc_PotL_To_Throw,Throwing Increase HP Potion (Large),10,100,,80,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13278,SP_Inc_PotS_To_Throw,Throwing Increase SP Potion (Small),10,100,,20,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13279,SP_Inc_PotM_To_Throw,Throwing Increase SP Potion (Medium),10,100,,40,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13280,SP_Inc_PotL_To_Throw,Throwing Increase SP Potion (Large),10,100,,80,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13281,En_White_PotZ_To_Throw,Throwing Concentrated White Potion Z,10,100,,70,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13282,Vitata500_To_Throw,Throwing Vitata 500,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13283,En_Cel_Juice_To_Throw,Throwing Ceromain Soup,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13284,Savage_BBQ_To_Throw,Throwing Savage Full Roast,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13285,Wug_Cocktail_To_Throw,Throwing Cocktail Warg Blood,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13286,M_Brisket_To_Throw,Throwing Minor Stew,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13287,Siroma_Icetea_To_Throw,Throwing Siroma Iced Tea,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13288,Drocera_Stew_To_Throw,Throwing Drosera Herb Salad,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13289,Petti_Noodle_To_Throw,Throwing Petite Tail Soup,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} +13290,Black_Thing_To_Throw,Throwing Black Mass,10,100,,50,0,,,,0x00040000,8,2,32768,,99,,9,{},{},{} 13294,Explosive_Kunai,Explosive Kunai,10,100,,30,50,,,,0x02000000,63,2,32768,,100,,7,{ bonus bAtkEle,Ele_Neutral; },{},{} // Ninja Fuuma Shurikens 13300,Huuma_Bird_Wing,Huuma Wing Shuriken,5,90000,,3000,150,,1,0,0x02000000,7,2,34,4,65,1,22,{ bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Wind; bonus bDex,-2; bonus bAgi,-1; },{},{} diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 8c1fc3721f..0ddd415ff8 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -6431,12 +6431,12 @@ 12419,Mana_Plus,Mana Plus,2,100,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_MANA_PLUS,500000,50; },{},{} 12420,Stamina_Up_M,Stamina Up M,2,100,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_MUSTLE_M,500000,5; },{},{} 12421,Falmons_F,Falmons F,3,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_LIFE_FORCE_F,500000,5; },{},{} -12422,HP_Increase_Potion_(Small),HP Increase Potion (Small),0,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INCMHP,500000,(500+(BaseLevel*10/3)); percentheal 1,0; },{},{} -12423,HP_Increase_Potion_(Medium),HP Increase Potion (Medium),0,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INCMHP,500000,(1500+(BaseLevel*10/3)); percentheal 2,0; },{},{} -12424,HP_Increase_Potion_(Large),HP Increase Potion (Large),0,10,,80,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INCMHP,500000,(2500+(BaseLevel*10/3)); percentheal 5,0; },{},{} -12425,SP_Increase_Potion_(Small),SP Increase Potion (Small),0,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INCMSPRATE,500000,((BaseLevel/10)-5); percentheal 0,2; },{},{} -12426,SP_Increase_Potion_(Medium),SP Increase Potion (Medium),0,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INCMSPRATE,500000,(BaseLevel/10); percentheal 0,4; },{},{} -12427,SP_Increase_Potion_(Large),SP Increase Potion (Large),0,10,,80,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INCMSPRATE,500000,((BaseLevel/10)+5); percentheal 0,8; },{},{} +12422,HP_Increase_Potion_(Small),HP Increase Potion (Small),2,100,,20,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,1; percentheal 1,0; },{},{} +12423,HP_Increase_Potion_(Medium),HP Increase Potion (Medium),2,100,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,2; percentheal 2,0; },{},{} +12424,HP_Increase_Potion_(Large),HP Increase Potion (Large),2,100,,80,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_PROMOTE_HEALTH_RESERCH,500000,1,3; percentheal 5,0; },{},{} +12425,SP_Increase_Potion_(Small),SP Increase Potion (Small),2,100,,20,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,1; percentheal 0,2; },{},{} +12426,SP_Increase_Potion_(Medium),SP Increase Potion (Medium),2,100,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,2; percentheal 0,4; },{},{} +12427,SP_Increase_Potion_(Large),SP Increase Potion (Large),2,100,,80,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start2 SC_ENERGY_DRINK_RESERCH,500000,1,3; percentheal 0,8; },{},{} 12428,Concentrated_White_Potion_Z,Concentrated White Potion Z,0,10,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; heal 1000,0; },{},{} 12429,Savage_Full_Roast,Savage Full Roast,2,,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_SAVAGE_STEAK,300000,20; },{},{} 12430,Cocktail_Warg_Blood,Cocktail Warg Blood,2,,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_COCKTAIL_WARG_BLOOD,300000,20; },{},{} @@ -7227,29 +7227,29 @@ 13265,Black_Lump,Black Lump,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} 13266,Black_Hard_Lump,Hard Black Lump,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} 13267,Very_Hard_Lump,Extremely Hard Black Lump,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} -13268,Mysterious_Powder,Mysterious Powder,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_MYSTERIOUS_POWDER,10000,2; },{},{} -13269,Boost500_To_Throw,Throwing Boost 500,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_BOOST500,500000,10; },{},{} -13270,Full_SwingK_To_Throw,Throwing Full Swing K,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_FULL_SWING_K,500000,50; },{},{} -13271,Mana_Plus_To_Throw,Throwing Mana Plus,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_MANA_PLUS,500000,50; },{},{} -13272,Cure_Free_To_Throw,Throwing Cure Free,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_end SC_BLEEDING; sc_end SC_CURSE; sc_end SC_SILENCE; sc_end SC_POISON; sc_end SC_ORCISH; sc_end SC_CHANGEUNDEAD; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_DPOISON; itemheal 500,0; },{},{} -13273,Stamina_Up_M_To_Throw,Throwing Muramura M,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_MUSTLE_M,500000,5; },{},{} -13274,Digestive_F_To_Throw,Throwing Falmons F,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_LIFE_FORCE_F,500000,5; },{},{} -13275,HP_Inc_PotS_To_Throw,Throwing Increase HP Potion (Small),10,100,,20,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_INCMHP,500000,(500+(BaseLevel*10/3)); percentheal 1,0; },{},{} -13276,HP_Inc_PotM_To_Throw,Throwing Increase HP Potion (Medium),10,100,,40,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_INCMHP,500000,(1500+(BaseLevel*10/3)); percentheal 2,0; },{},{} -13277,HP_Inc_PotL_To_Throw,Throwing Increase HP Potion (Large),10,100,,80,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_INCMHP,500000,(2500+(BaseLevel*10/3)); percentheal 5,0; },{},{} -13278,SP_Inc_PotS_To_Throw,Throwing Increase SP Potion (Small),10,100,,20,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_INCMSP,500000,((BaseLevel/10)-5); percentheal 0,2; },{},{} -13279,SP_Inc_PotM_To_Throw,Throwing Increase SP Potion (Medium),10,100,,40,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_INCMSP,500000,((BaseLevel/10)); percentheal 0,4; },{},{} -13280,SP_Inc_PotL_To_Throw,Throwing Increase SP Potion (Large),10,100,,80,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_INCMSP,500000,((BaseLevel/10)+5); percentheal 0,8; },{},{} -13281,En_White_PotZ_To_Throw,Throwing Concentrated White Potion Z,10,100,,70,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_EXTRACT_WHITE_POTION_Z,500000,20; itemheal 1000,0; },{},{} -13282,Vitata500_To_Throw,Throwing Vitata 500,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start2 SC_VITATA_500,500000,20,5; itemheal 0,200; },{},{} -13283,En_Cel_Juice_To_Throw,Throwing Ceromain Soup,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_EXTRACT_SALAMINE_JUICE,500000,10; },{},{} -13284,Savage_BBQ_To_Throw,Throwing Savage Full Roast,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_SAVAGE_STEAK,300000,20; },{},{} -13285,Wug_Cocktail_To_Throw,Throwing Cocktail Warg Blood,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_COCKTAIL_WARG_BLOOD,300000,20; },{},{} -13286,M_Brisket_To_Throw,Throwing Minor Stew,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_MINOR_BBQ,300000,20; },{},{} -13287,Siroma_Icetea_To_Throw,Throwing Siroma Iced Tea,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_SIROMA_ICE_TEA,300000,20; },{},{} -13288,Drocera_Stew_To_Throw,Throwing Drosera Herb Salad,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_DROCERA_HERB_STEAMED,300000,20; },{},{} -13289,Petti_Noodle_To_Throw,Throwing Petite Tail Soup,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_PUTTI_TAILS_NOODLES,300000,20; },{},{} -13290,Black_Thing_To_Throw,Throwing Black Mass,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{ sc_start SC_STOMACHACHE,60000,rand(5,10); },{},{} +13268,Mysterious_Powder,Mysterious Powder,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13269,Boost500_To_Throw,Throwing Boost 500,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13270,Full_SwingK_To_Throw,Throwing Full Swing K,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13271,Mana_Plus_To_Throw,Throwing Mana Plus,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13272,Cure_Free_To_Throw,Throwing Cure Free,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13273,Stamina_Up_M_To_Throw,Throwing Muramura M,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13274,Digestive_F_To_Throw,Throwing Falmons F,10,100,,10,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13275,HP_Inc_PotS_To_Throw,Throwing Increase HP Potion (Small),10,100,,20,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13276,HP_Inc_PotM_To_Throw,Throwing Increase HP Potion (Medium),10,100,,40,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13277,HP_Inc_PotL_To_Throw,Throwing Increase HP Potion (Large),10,100,,80,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13278,SP_Inc_PotS_To_Throw,Throwing Increase SP Potion (Small),10,100,,20,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13279,SP_Inc_PotM_To_Throw,Throwing Increase SP Potion (Medium),10,100,,40,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13280,SP_Inc_PotL_To_Throw,Throwing Increase SP Potion (Large),10,100,,80,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13281,En_White_PotZ_To_Throw,Throwing Concentrated White Potion Z,10,100,,70,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13282,Vitata500_To_Throw,Throwing Vitata 500,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13283,En_Cel_Juice_To_Throw,Throwing Ceromain Soup,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13284,Savage_BBQ_To_Throw,Throwing Savage Full Roast,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13285,Wug_Cocktail_To_Throw,Throwing Cocktail Warg Blood,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13286,M_Brisket_To_Throw,Throwing Minor Stew,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13287,Siroma_Icetea_To_Throw,Throwing Siroma Iced Tea,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13288,Drocera_Stew_To_Throw,Throwing Drosera Herb Salad,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13289,Petti_Noodle_To_Throw,Throwing Petite Tail Soup,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} +13290,Black_Thing_To_Throw,Throwing Black Mass,10,100,,50,0,,,,0x00040000,56,2,32768,,99,,9,{},{},{} //=================================================================== // More Shurikens & Kunais //=================================================================== @@ -8526,7 +8526,7 @@ 16018,Mace_Of_Judgement2,Empowered Mace Of Judgement,5,20,,1200,170:180,,1,1,0x00000100,56,2,2,3,130,1,8,{ bonus bAtkEle,Ele_Holy; bonus bStr,2; bonus bInt,2; autobonus "{ bonus2 bMagicAddRace,RC_Demon,40; }",60,7000,BF_MAGIC,"{ specialeffect2 EF_SPELLBREAKER; }"; autobonus "{ bonus2 bAddRace,RC_Demon,40; }",10,7000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{} 16019,Upg_Mace,Upg Mace,5,20,,800,80,,1,1,0x0004C5B3,63,2,2,3,1,1,8,{ .@r = getrefine(); bonus bBaseAtk,(.@r*10); bonus bHealPower,.@r; if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*5); },{},{} 16020,Velum_Stunner,Vellum Stunner,5,20,,1500,170,,1,0,0x0004C5B3,63,2,2,4,95,1,8,{ bonus bUnbreakableWeapon,1; .@r = getrefine(); bonus2 bAddEff,Eff_Stun,1000+.@r; bonus4 bSetDefRace,RC_Player,10000,5000,1; bonus4 bSetMDefRace,RC_Player,10000,5000,1; bonus bAspdRate,.@r; },{},{} -16021,Velum_Flail,Vellum Flail,5,20,,1500,170,,1,0,0x0004C5B3,63,2,2,4,95,1,8,{ bonus bUnbreakableWeapon,1; bonus5 bAutoSpell,"NPC_CRITICALWOUND",5,10,BF_WEAPON,1; .@r = getrefine(); bonus bHit,.@r; bonus bCritical,.@r; },{},{} +16021,Velum_Flail,Vellum Flail,5,20,,1500,170,,1,0,0x0004C5B3,63,2,2,4,95,1,8,{ bonus bUnbreakableWeapon,1; bonus3 bStateNoRecoverRace,RC_DemiHuman,10000,10000; .@r = getrefine(); bonus bHit,.@r; bonus bCritical,.@r; },{},{} 16022,Nemesis_,Nemesis ,5,20,,900,120,,1,2,0x00008110,63,2,2,4,60,1,8,{ bonus bUnbreakableWeapon,1; bonus bAtkEle,Ele_Holy; },{},{} 16023,Metal_Mace,Metal Mace,5,20,,0,80,,1,1,0x0004C5B3,63,2,2,3,1,1,8,{ bonus bUnbreakableWeapon,1; bonus bBaseAtk,(getrefine()*5); .@i = ((BaseLevel/10)>12)?12:(BaseLevel/10); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{} 16024,Quadrille,Quadrille,5,10,,900,165,,,2,0x10,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; bonus2 bAddEle,Ele_Earth,10; },{},{} diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index a20c18ed91..44ce7e4a09 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -369,6 +369,8 @@ bonus2 bSPVanishRate,x,n; Add a x/10% chance of decreasing enemy's SP amount by bonus3 bHPVanishRaceRate,r,x,n; Add a x/100% chance of decreasing enemy's HP amount by n% when attacking, depends on enemy race r bonus3 bSPVanishRaceRate,r,x,n; Add a x/100% chance of decreasing enemy's SP amount by n% when attacking, depends on enemy race r +bonus3 bStateNoRecoverRace,n,x,r; Set a no recovery state of an enemy of race n at x% for r milliseconds with normal attack. + HP/SP gain ------------ bonus bHPGainValue,n; Heals +n HP when killing an enemy with a physical attack diff --git a/src/map/map.h b/src/map/map.h index 5f6fe7cbf2..2260bf1cdc 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -516,6 +516,7 @@ enum _sp { SP_WEAPON_COMA_CLASS, SP_IGNORE_MDEF_CLASS_RATE, SP_EXP_ADDCLASS, SP_ADD_CLASS_DROP_ITEM, //2067-2070 SP_ADD_CLASS_DROP_ITEMGROUP, SP_ADDMAXWEIGHT, SP_ADD_ITEMGROUP_HEAL_RATE, // 2071-2073 SP_HP_VANISH_RACE_RATE, SP_SP_VANISH_RACE_RATE, SP_ABSORB_DMG_MAXHP, SP_SUB_SKILL, SP_SUBDEF_ELE, // 2074-2078 + SP_STATE_NORECOVER_RACE, // 2079 }; enum _look { diff --git a/src/map/pc.c b/src/map/pc.c index 22d8541805..03147f6e9e 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -3780,7 +3780,13 @@ void pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val) sd->hp_vanish_race[type2].per += val; } break; - + case SP_STATE_NORECOVER_RACE: + PC_BONUS_CHK_RACE(type2, SP_STATE_NORECOVER_RACE); + if (sd->state.lr_flag == 2) + break; + sd->norecover_state_race[type2].rate = type3; + sd->norecover_state_race[type2].tick = val; + break; default: ShowWarning("pc_bonus3: unknown type %d %d %d %d!\n",type,type2,type3,val); break; @@ -7957,7 +7963,7 @@ void pc_heal(struct map_session_data *sd,unsigned int hp,unsigned int sp, int ty *------------------------------------------*/ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp) { - int bonus, tmp; + int bonus, tmp, penalty = 0; if(hp) { int i; @@ -8002,28 +8008,33 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp) if(bonus != 100 && tmp > sp) sp = tmp; } - if( sd->sc.count ) { - if ( sd->sc.data[SC_CRITICALWOUND] ) { - hp -= hp * sd->sc.data[SC_CRITICALWOUND]->val2 / 100; - sp -= sp * sd->sc.data[SC_CRITICALWOUND]->val2 / 100; + if (sd->sc.count) { + // Critical Wound and Death Hurt stack + if (sd->sc.data[SC_CRITICALWOUND]) + penalty += sd->sc.data[SC_CRITICALWOUND]->val2; + + if (sd->sc.data[SC_DEATHHURT]) + penalty += 20; + + if (sd->sc.data[SC_NORECOVER_STATE]) + penalty = 100; + + if (penalty > 0) { + hp -= hp * penalty / 100; + sp -= sp * penalty / 100; } - if ( sd->sc.data[SC_DEATHHURT] ) { - hp -= hp * 20 / 100; - sp -= sp * 20 / 100; - } - - if( sd->sc.data[SC_VITALITYACTIVATION] ){ + if (sd->sc.data[SC_VITALITYACTIVATION]) { hp += hp / 2; // 1.5 times sp -= sp / 2; } - if( sd->sc.data[SC_WATER_INSIGNIA] && sd->sc.data[SC_WATER_INSIGNIA]->val1 == 2 ) { + if (sd->sc.data[SC_WATER_INSIGNIA] && sd->sc.data[SC_WATER_INSIGNIA]->val1 == 2) { hp += hp / 10; sp += sp / 10; } #ifdef RENEWAL - if( sd->sc.data[SC_EXTREMITYFIST2] ) + if (sd->sc.data[SC_EXTREMITYFIST2]) sp = 0; #endif } diff --git a/src/map/pc.h b/src/map/pc.h index 33706d97f5..fec52e3576 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -397,7 +397,7 @@ struct map_session_data { struct { short value; int rate, tick; - } def_set_race[RC_MAX], mdef_set_race[RC_MAX]; + } def_set_race[RC_MAX], mdef_set_race[RC_MAX], norecover_state_race[RC_MAX]; struct s_bonus_vanish_gain { short rate, ///< Success rate 0 - 1000 (100%) per; ///< % HP/SP vanished/gained diff --git a/src/map/script.c b/src/map/script.c index ef0c5eaefa..e2a656c4ba 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -6111,6 +6111,12 @@ BUILDIN_FUNC(percentheal) if( sd->sc.data[SC_EXTREMITYFIST2] ) sp = 0; #endif + + if (sd->sc.data[SC_NORECOVER_STATE]) { + hp = 0; + sp = 0; + } + pc_percentheal(sd,hp,sp); return SCRIPT_CMD_SUCCESS; } @@ -11094,6 +11100,7 @@ BUILDIN_FUNC(sc_end) case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: case SC_REUSE_LIMIT_MTF: case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE: case SC_REUSE_STORMBLAST: case SC_ALL_RIDING_REUSE_LIMIT: case SC_REUSE_REFRESH: + case SC_REUSE_LIMIT_ECL: case SC_REUSE_LIMIT_RECALL: return SCRIPT_CMD_SUCCESS; default: break; diff --git a/src/map/skill.c b/src/map/skill.c index b9408ca8b8..a7a50a2e29 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -500,15 +500,27 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk if( sc && sc->data[SC_OFFERTORIUM] && (skill_id == AB_HIGHNESSHEAL || skill_id == AB_CHEAL || skill_id == PR_SANCTUARY || skill_id == AL_HEAL) ) hp += hp * sc->data[SC_OFFERTORIUM]->val2 / 100; - if( tsc && tsc->count ) { - if( heal && tsc->data[SC_CRITICALWOUND] ) //Critical Wound has no effect on offensive heal. [Inkfish] - hp -= hp * tsc->data[SC_CRITICALWOUND]->val2 / 100; - if( heal && tsc->data[SC_DEATHHURT] ) - hp -= hp * 20/100; - if( tsc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN ) - hp += hp * tsc->data[SC_INCHEALRATE]->val1 / 100; //Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish] - if( tsc->data[SC_WATER_INSIGNIA] && tsc->data[SC_WATER_INSIGNIA]->val1 == 2) - hp += hp / 10; + if (tsc && tsc->count) { + if (skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN) { + if (tsc->data[SC_INCHEALRATE]) + hp += hp * tsc->data[SC_INCHEALRATE]->val1 / 100; //Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish] + if (tsc->data[SC_EXTRACT_WHITE_POTION_Z]) + hp += hp * tsc->data[SC_EXTRACT_WHITE_POTION_Z]->val1 / 100; + if (tsc->data[SC_WATER_INSIGNIA] && tsc->data[SC_WATER_INSIGNIA]->val1 == 2) + hp += hp / 10; + } + if (heal) { + uint8 penalty = 0; + + if (tsc->data[SC_CRITICALWOUND]) + penalty += tsc->data[SC_CRITICALWOUND]->val2; + if (tsc->data[SC_DEATHHURT]) + penalty += 20; + if (tsc->data[SC_NORECOVER_STATE]) + penalty = 100; + if (penalty > 0) + hp -= hp * penalty / 100; + } } #ifdef RENEWAL @@ -1877,11 +1889,14 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 } if (sd && !skill_id && bl->type == BL_PC) { // This effect does not work with skills. if (sd->def_set_race[tstatus->race].rate) - status_change_start(src,bl, SC_DEFSET, sd->def_set_race[tstatus->race].rate, sd->def_set_race[tstatus->race].value, + status_change_start(src,bl, SC_DEFSET, sd->def_set_race[tstatus->race].rate, sd->def_set_race[tstatus->race].value, 0, 0, 0, sd->def_set_race[tstatus->race].tick, SCSTART_NOTICKDEF); if (sd->def_set_race[tstatus->race].rate) - status_change_start(src,bl, SC_MDEFSET, sd->mdef_set_race[tstatus->race].rate, sd->mdef_set_race[tstatus->race].value, + status_change_start(src,bl, SC_MDEFSET, sd->mdef_set_race[tstatus->race].rate, sd->mdef_set_race[tstatus->race].value, 0, 0, 0, sd->mdef_set_race[tstatus->race].tick, SCSTART_NOTICKDEF); + if (sd->norecover_state_race[tstatus->race].rate) + status_change_start(src, bl, SC_NORECOVER_STATE, sd->norecover_state_race[tstatus->race].rate, + 0, 0, 0, 0, sd->norecover_state_race[tstatus->race].tick, SCSTART_NOTICKDEF); } } @@ -7350,29 +7365,39 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui hp += hp * j / 100; sp += sp * j / 100; } - if( tsc && tsc->count ) { - if( tsc->data[SC_CRITICALWOUND] ) { - hp -= hp * tsc->data[SC_CRITICALWOUND]->val2 / 100; - sp -= sp * tsc->data[SC_CRITICALWOUND]->val2 / 100; - } - if( tsc->data[SC_DEATHHURT] ) { - hp -= hp * 20 / 100; - sp -= sp * 20 / 100; - } - if( tsc->data[SC_WATER_INSIGNIA] && tsc->data[SC_WATER_INSIGNIA]->val1 == 2 ) { + if (tsc && tsc->count) { + uint8 penalty = 0; + + if (tsc->data[SC_WATER_INSIGNIA] && tsc->data[SC_WATER_INSIGNIA]->val1 == 2) { hp += hp / 10; sp += sp / 10; } + if (tsc->data[SC_CRITICALWOUND]) + penalty += tsc->data[SC_CRITICALWOUND]->val2; + if (tsc->data[SC_DEATHHURT]) + penalty += 20; + if (tsc->data[SC_NORECOVER_STATE]) + penalty = 100; + if (penalty > 0) { + hp -= hp * penalty / 100; + sp -= sp * penalty / 100; + } } clif_skill_nodamage(src,bl,skill_id,skill_lv,1); if( hp > 0 || (skill_id == AM_POTIONPITCHER && sp <= 0) ) clif_skill_nodamage(NULL,bl,AL_HEAL,hp,1); if( sp > 0 ) clif_skill_nodamage(NULL,bl,MG_SRECOVERY,sp,1); + if (tsc) { #ifdef RENEWAL - if( tsc && tsc->data[SC_EXTREMITYFIST2] ) - sp = 0; + if (tsc->data[SC_EXTREMITYFIST2]) + sp = 0; #endif + if (tsc->data[SC_NORECOVER_STATE]) { + hp = 0; + sp = 0; + } + } status_heal(bl,hp,sp,0); } break; @@ -8084,6 +8109,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if( tsc && tsc->data[SC_EXTREMITYFIST2] ) sp1 = tstatus->sp; #endif + if (tsc->data[SC_NORECOVER_STATE]) + sp1 = tstatus->sp; status_set_sp(src, sp2, 3); status_set_sp(bl, sp1, 3); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); @@ -8105,19 +8132,23 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if (sp) sp = sp * (100 + pc_checkskill(dstsd,MG_SRECOVERY)*10 + pc_skillheal2_bonus(dstsd, skill_id))/100; } - if( tsc && tsc->count ) { - if (tsc->data[SC_CRITICALWOUND]) { - hp -= hp * tsc->data[SC_CRITICALWOUND]->val2 / 100; - sp -= sp * tsc->data[SC_CRITICALWOUND]->val2 / 100; - } - if (tsc->data[SC_DEATHHURT]) { - hp -= hp * 20 / 100; - sp -= sp * 20 / 100; - } - if( tsc->data[SC_WATER_INSIGNIA] && tsc->data[SC_WATER_INSIGNIA]->val1 == 2) { + if (tsc && tsc->count) { + uint8 penalty = 0; + + if (tsc->data[SC_WATER_INSIGNIA] && tsc->data[SC_WATER_INSIGNIA]->val1 == 2) { hp += hp / 10; sp += sp / 10; } + if (tsc->data[SC_CRITICALWOUND]) + penalty += tsc->data[SC_CRITICALWOUND]->val2; + if (tsc->data[SC_DEATHHURT]) + penalty += 20; + if (tsc->data[SC_NORECOVER_STATE]) + penalty = 100; + if (penalty > 0) { + hp -= hp * penalty / 100; + sp -= sp * penalty / 100; + } } if(hp > 0) clif_skill_nodamage(NULL,bl,AL_HEAL,hp,1); @@ -10073,14 +10104,95 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui skill_attack(BF_WEAPON,src,src,bl,GN_SLINGITEM_RANGEMELEEATK,skill_lv,tick,flag); } else //Otherwise, it fails, shows animation and removes items. clif_skill_fail(sd,GN_SLINGITEM_RANGEMELEEATK,USESKILL_FAIL,0); - } else if( itemdb_is_GNthrowable(ammo_id) ){ - struct script_code *script = sd->inventory_data[i]->script; - if( !script ) + } else if (itemdb_is_GNthrowable(ammo_id)) { + switch (ammo_id) { + case ITEMID_MYSTERIOUS_POWDER: //MaxHP -2% + sc_start(src, bl, SC_MYSTERIOUS_POWDER, 100, 2, 10000); break; - if( dstsd ) - run_script(script,0,dstsd->bl.id,fake_nd->bl.id); - else - run_script(script,0,src->id,0); + case ITEMID_BOOST500_TO_THROW: //ASPD +10% + sc_start(src, bl, SC_BOOST500, 100, 10, 500000); + break; + case ITEMID_FULL_SWINGK_TO_THROW: //WATK +50 + sc_start(src, bl, SC_FULL_SWING_K, 100, 50, 500000); + break; + case ITEMID_MANA_PLUS_TO_THROW: //MATK +50 + sc_start(src, bl, SC_MANA_PLUS, 100, 50, 500000); + break; + case ITEMID_CURE_FREE_TO_THROW: //Cures Silence, Bleeding, Poison, Curse, Orcish, Undead, Blind, Confusion, DPoison and heals 500 HP + status_change_end(bl, SC_SILENCE, INVALID_TIMER); + status_change_end(bl, SC_BLEEDING, INVALID_TIMER); + status_change_end(bl, SC_POISON, INVALID_TIMER); + status_change_end(bl, SC_CURSE, INVALID_TIMER); + status_change_end(bl, SC_ORCISH, INVALID_TIMER); + status_change_end(bl, SC_CHANGEUNDEAD, INVALID_TIMER); + status_change_end(bl, SC_BLIND, INVALID_TIMER); + status_change_end(bl, SC_CONFUSION, INVALID_TIMER); + status_change_end(bl, SC_DPOISON, INVALID_TIMER); + status_heal(bl, 500, 0, 0); + break; + case ITEMID_STAMINA_UP_M_TO_THROW: //MaxHP +5% + sc_start(src, bl, SC_MUSTLE_M, 100, 5, 500000); + break; + case ITEMID_DIGESTIVE_F_TO_THROW: //MaxSP +5% + sc_start(src, bl, SC_LIFE_FORCE_F, 100, 5, 500000); + break; + case ITEMID_HP_INC_POTS_TO_THROW: //MaxHP +(500 + Thrower BaseLv * 10 / 3) and heals 1% MaxHP + sc_start4(src, bl, SC_PROMOTE_HEALTH_RESERCH, 100, 2, 1, status_get_lv(src), 0, 500000); + status_percent_heal(bl, 1, 0); + break; + case ITEMID_HP_INC_POTM_TO_THROW: //MaxHP +(1500 + Thrower BaseLv * 10 / 3) and heals 2% MaxHP + sc_start4(src, bl, SC_PROMOTE_HEALTH_RESERCH, 100, 2, 2, status_get_lv(src), 0, 500000); + status_percent_heal(bl, 2, 0); + break; + case ITEMID_HP_INC_POTL_TO_THROW: //MaxHP +(2500 + Thrower BaseLv * 10 / 3) and heals 5% MaxHP + sc_start4(src, bl, SC_PROMOTE_HEALTH_RESERCH, 100, 2, 3, status_get_lv(src), 0, 500000); + status_percent_heal(bl, 5, 0); + break; + case ITEMID_SP_INC_POTS_TO_THROW: //MaxSP +(Thrower BaseLv / 10 - 5)% and recovers 2% MaxSP + sc_start4(src, bl, SC_ENERGY_DRINK_RESERCH, 100, 2, 1, status_get_lv(src), 0, 500000); + status_percent_heal(bl, 0, 2); + break; + case ITEMID_SP_INC_POTM_TO_THROW: //MaxSP +(Thrower BaseLv / 10)% and recovers 4% MaxSP + sc_start4(src, bl, SC_ENERGY_DRINK_RESERCH, 100, 2, 2, status_get_lv(src), 0, 500000); + status_percent_heal(bl, 0, 4); + break; + case ITEMID_SP_INC_POTL_TO_THROW: //MaxSP +(Thrower BaseLv / 10 + 5)% and recovers 8% MaxSP + sc_start4(src, bl, SC_ENERGY_DRINK_RESERCH, 100, 2, 3, status_get_lv(src), 0, 500000); + status_percent_heal(bl, 0, 8); + break; + case ITEMID_EN_WHITE_POTZ_TO_THROW: //Natural HP Recovery +20% and heals 1000 HP + sc_start(src, bl, SC_EXTRACT_WHITE_POTION_Z, 100, 20, 500000); + pc_itemheal((TBL_PC *)bl, ITEMID_EN_WHITE_POTZ_TO_THROW, 1000, 0); + break; + case ITEMID_VITATA500_TO_THROW: //Natural SP Recovery +20%, MaxSP +5%, and recovers 200 SP + sc_start2(src, bl, SC_VITATA_500, 100, 20, 5, 500000); + pc_itemheal((TBL_PC *)bl, ITEMID_VITATA500_TO_THROW, 0, 200); + break; + case ITEMID_EN_CEL_JUICE_TO_THROW: //ASPD +10% + sc_start(src, bl, SC_EXTRACT_SALAMINE_JUICE, 100, 10, 500000); + break; + case ITEMID_SAVAGE_BBQ_TO_THROW: //STR +20 + sc_start(src, bl, SC_SAVAGE_STEAK, 100, 20, 300000); + break; + case ITEMID_WUG_COCKTAIL_TO_THROW: //INT +20 + sc_start(src, bl, SC_COCKTAIL_WARG_BLOOD, 100, 20, 300000); + break; + case ITEMID_M_BRISKET_TO_THROW: //VIT +20 + sc_start(src, bl, SC_MINOR_BBQ, 100, 20, 300000); + break; + case ITEMID_SIROMA_ICETEA_TO_THROW: //DEX +20 + sc_start(src, bl, SC_SIROMA_ICE_TEA, 100, 20, 300000); + break; + case ITEMID_DROCERA_STEW_TO_THROW: //AGI +20 + sc_start(src, bl, SC_DROCERA_HERB_STEAMED, 100, 20, 300000); + break; + case ITEMID_PETTI_NOODLE_TO_THROW: //LUK +20 + sc_start(src, bl, SC_PUTTI_TAILS_NOODLES, 100, 20, 300000); + break; + case ITEMID_BLACK_THING_TO_THROW: //Reduces all stats by random 5 - 10 + sc_start(src, bl, SC_STOMACHACHE, 100, rnd_value(5, 10), 60000); + break; + } } } clif_skill_nodamage(src,bl,skill_id,skill_lv,1); diff --git a/src/map/status.c b/src/map/status.c index 03ac211dad..b270ea3eea 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -946,6 +946,8 @@ void initChangeTables(void) StatusIconChangeTable[SC_MELON_BOMB] = SI_MELON_BOMB; StatusIconChangeTable[SC_BANANA_BOMB] = SI_BANANA_BOMB; StatusIconChangeTable[SC_BANANA_BOMB_SITDOWN] = SI_BANANA_BOMB_SITDOWN_POSTDELAY; + StatusIconChangeTable[SC_PROMOTE_HEALTH_RESERCH] = SI_PROMOTE_HEALTH_RESERCH; + StatusIconChangeTable[SC_ENERGY_DRINK_RESERCH] = SI_ENERGY_DRINK_RESERCH; /* Genetics New Food Items Status Icons */ StatusIconChangeTable[SC_SAVAGE_STEAK] = SI_SAVAGE_STEAK; @@ -1015,6 +1017,7 @@ void initChangeTables(void) StatusIconChangeTable[SC_MTF_MHP] = SI_MTF_MHP; StatusIconChangeTable[SC_MTF_MSP] = SI_MTF_MSP; StatusIconChangeTable[SC_MTF_PUMPKIN] = SI_MTF_PUMPKIN; + StatusIconChangeTable[SC_NORECOVER_STATE] = SI_HANDICAPSTATE_NORECOVER; // Item Reuse Limits StatusIconChangeTable[SC_REUSE_REFRESH] = SI_REUSE_REFRESH; @@ -1027,6 +1030,8 @@ void initChangeTables(void) StatusIconChangeTable[SC_REUSE_LIMIT_G] = SI_REUSE_LIMIT_G; StatusIconChangeTable[SC_REUSE_LIMIT_H] = SI_REUSE_LIMIT_H; StatusIconChangeTable[SC_REUSE_LIMIT_MTF] = SI_REUSE_LIMIT_MTF; + StatusIconChangeTable[SC_REUSE_LIMIT_ECL] = SI_REUSE_LIMIT_ECL; + StatusIconChangeTable[SC_REUSE_LIMIT_RECALL] = SI_REUSE_LIMIT_RECALL; StatusIconChangeTable[SC_REUSE_LIMIT_ASPD_POTION] = SI_REUSE_LIMIT_ASPD_POTION; StatusIconChangeTable[SC_REUSE_MILLENNIUMSHIELD] = SI_REUSE_MILLENNIUMSHIELD; StatusIconChangeTable[SC_REUSE_CRUSHSTRIKE] = SI_REUSE_CRUSHSTRIKE; @@ -1114,6 +1119,8 @@ void initChangeTables(void) StatusChangeFlagTable[SC_MYSTERIOUS_POWDER] |= SCB_MAXHP; StatusChangeFlagTable[SC_MELON_BOMB] |= SCB_SPEED|SCB_ASPD; StatusChangeFlagTable[SC_BANANA_BOMB] |= SCB_LUK; + StatusChangeFlagTable[SC_PROMOTE_HEALTH_RESERCH] |= SCB_MAXHP; + StatusChangeFlagTable[SC_ENERGY_DRINK_RESERCH] |= SCB_MAXSP; StatusChangeFlagTable[SC_SAVAGE_STEAK] |= SCB_STR; StatusChangeFlagTable[SC_COCKTAIL_WARG_BLOOD] |= SCB_INT; StatusChangeFlagTable[SC_MINOR_BBQ] |= SCB_VIT; @@ -2751,6 +2758,8 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) { bonus += 500; if(sc->data[SC_LERADSDEW]) bonus += sc->data[SC_LERADSDEW]->val3; + if (sc->data[SC_PROMOTE_HEALTH_RESERCH]) + bonus += sc->data[SC_PROMOTE_HEALTH_RESERCH]->val4; if(sc->data[SC_INSPIRATION]) bonus += (600 * sc->data[SC_INSPIRATION]->val1); if(sc->data[SC_SOLID_SKIN_OPTION]) @@ -2904,6 +2913,8 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) { bonus += sc->data[SC_LIFE_FORCE_F]->val1; if(sc->data[SC_VITATA_500]) bonus += sc->data[SC_VITATA_500]->val2; + if (sc->data[SC_ENERGY_DRINK_RESERCH]) + bonus += sc->data[SC_ENERGY_DRINK_RESERCH]->val4; } // Max rate reduce is -100% bonus = cap_value(bonus,-100,INT_MAX); @@ -3116,6 +3127,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) + sizeof(sd->subele2) + sizeof(sd->def_set_race) + sizeof(sd->mdef_set_race) + + sizeof(sd->norecover_state_race) + sizeof(sd->hp_vanish_race) + sizeof(sd->sp_vanish_race) ); @@ -7504,6 +7516,9 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ case SC_B_TRAP: tick_def = (sd ? sd->status.str : status_get_base_status(bl)->str) * 50; // (custom) break; + case SC_NORECOVER_STATE: + tick_def2 = status->luk * 100; + break; default: // Effect that cannot be reduced? Likely a buff. if (!(rnd()%10000 < rate)) @@ -8538,6 +8553,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_NOCHAT: case SC_ABUNDANCE: case SC_FEAR: + case SC_BURNING: + case SC_FREEZING: + case SC_WHITEIMPRISON: case SC_TOXIN: case SC_PARALYSE: case SC_VENOMBLEED: @@ -8546,15 +8564,18 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_PYREXIA: case SC_OBLIVIONCURSE: case SC_LEECHESEND: - case SC__INVISIBILITY: case SC__ENERVATION: case SC__GROOMY: case SC__IGNORANCE: case SC__LAZINESS: - case SC__WEAKNESS: case SC__UNLUCKY: - //case SC__CHAOS: - case SC_REUSE_REFRESH: + case SC__WEAKNESS: + case SC_DEEPSLEEP: + case SC_NETHERWORLD: + case SC_CRYSTALIZE: + case SC_DEFSET: + case SC_MDEFSET: + case SC_NORECOVER_STATE: case SC_REUSE_LIMIT_A: case SC_REUSE_LIMIT_B: case SC_REUSE_LIMIT_C: @@ -8563,12 +8584,15 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_REUSE_LIMIT_F: case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: - case SC_REUSE_LIMIT_MTF: - case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE: + case SC_REUSE_REFRESH: case SC_REUSE_STORMBLAST: case SC_ALL_RIDING_REUSE_LIMIT: + case SC_REUSE_LIMIT_MTF: + case SC_REUSE_LIMIT_ECL: + case SC_REUSE_LIMIT_RECALL: + case SC_REUSE_LIMIT_ASPD_POTION: return 0; case SC_COMBO: case SC_DANCING: @@ -10000,6 +10024,30 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val4 = tick / 10000; tick_time = 10000; // [GodLesZ] tick time break; + case SC_PROMOTE_HEALTH_RESERCH: + //val1: 1 = Regular Potion, 2 = Thrown Potion + //val2: 1 = Small Potion, 2 = Medium Potion, 3 = Large Potion + //val3: BaseLV of Thrower For Thrown Potions + //val4: MaxHP Increase By Fixed Amount + if (val1 == 1) // If potion was normally used, take the user's BaseLv + val4 = 1000 * val2 - 500 + status_get_lv(bl) * 10 / 3; + else if (val1 == 2) // If potion was thrown at someone, take the thrower's BaseLv + val4 = 1000 * val2 - 500 + val3 * 10 / 3; + if (val4 <= 0) // Prevents a negeative value from happening + val4 = 0; + break; + case SC_ENERGY_DRINK_RESERCH: + //val1: 1 = Regular Potion, 2 = Thrown Potion + //val2: 1 = Small Potion, 2 = Medium Potion, 3 = Large Potion + //val3: BaseLV of Thrower For Thrown Potions + //val4: MaxSP Increase By Percentage Amount + if (val1 == 1) // If potion was normally used, take the user's BaseLv + val4 = status_get_lv(bl) / 10 + 5 * val2 - 10; + else if (val1 == 2) // If potion was thrown at someone, take the thrower's BaseLv + val4 = val3 / 10 + 5 * val2 - 10; + if (val4 <= 0) // Prevents a negeative value from happening + val4 = 0; + break; case SC_KYOUGAKU: val2 = 2*val1 + rnd()%val1; clif_status_change(bl,SI_ACTIVE_MONSTER_TRANSFORM,1,0,1002,0,0); @@ -10818,6 +10866,8 @@ int status_change_clear(struct block_list* bl, int type) case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: case SC_REUSE_LIMIT_MTF: + case SC_REUSE_LIMIT_ECL: + case SC_REUSE_LIMIT_RECALL: case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE: @@ -12746,6 +12796,8 @@ void status_change_clear_buffs (struct block_list* bl, int type) case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: case SC_REUSE_LIMIT_MTF: + case SC_REUSE_LIMIT_ECL: + case SC_REUSE_LIMIT_RECALL: case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE: diff --git a/src/map/status.h b/src/map/status.h index 1717a0fb43..f7bf9dbf8a 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -733,6 +733,12 @@ typedef enum sc_type { SC_REUSE_CRUSHSTRIKE, SC_REUSE_STORMBLAST, SC_ALL_RIDING_REUSE_LIMIT, + SC_REUSE_LIMIT_ECL, + SC_REUSE_LIMIT_RECALL, + + SC_PROMOTE_HEALTH_RESERCH, + SC_ENERGY_DRINK_RESERCH, + SC_NORECOVER_STATE, #ifdef RENEWAL SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled