Jump to content
  • 0
Sign in to follow this  
Angelmelody

R> Jumping Candy item script

Question

http://ratemyserver.net/index.php?page=item_db&item_id=14586

A hard candy that feels like its jumping in your mouth when you eat it.

You'll need to remember to brush your teeth after!

1 minute increase ATK + 20, Attack Speed + 25%, and permanent endure.

Decreases 100HP per 10 seconds. Cooldown for 3 minutes.

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

solved by myself

 

 

 

{	Id: 14586	AegisName: "Spark_Candy"	Name: "jumping candy"	Type: 2	Buy: 0	Weight: 10	Upper: 63	Delay: 180000	Trade: {		nodrop: true		noselltonpc: true	}	Script: <" 		sc_start SC_INCBASEATK,60000,20;		sc_start SC_INCASPDRATE,60000,25;		sc_start SC_ENDURE,60000,1;		sc_start4 SC_HPDRAIN,60000,100,10,0,0;	">},
adding required sc state

 

 

4d6a9494405c271534390ae72db713bf0dcaaee db/const.txt     |  2 ++ src/map/status.c | 26 +++++++++++++++++++++++++- src/map/status.h |  6 +++--- 3 files changed, 30 insertions(+), 4 deletions(-)diff --git a/db/const.txt b/db/const.txtindex fc1aa0f..88586ef 100644--- a/db/const.txt+++ b/db/const.txt@@ -953,6 +953,7 @@ SC_CASH_RECEIVEITEM	259 SC_CASH_BOSS_ALARM	260 SC_CASH_DEATHPENALTY	261 SC_CRITICALPERCENT	262+SC_INCBASEATK	264 SC_PROTECT_MDEF	266 SC_HEALPLUS	268 SC_PNEUMA	269@@ -971,6 +972,7 @@ SC_MER_SP	282 SC_MER_HIT	283 SC_MER_QUICKEN	284 SC_REBIRTH	285+SC_HPDRAIN	288 SC_ITEMSCRIPT	290 SC_S_LIFEPOTION	291 SC_L_LIFEPOTION	292diff --git a/src/map/status.c b/src/map/status.cindex 30907b5..340c598 100644--- a/src/map/status.c+++ b/src/map/status.c@@ -936,6 +936,7 @@ void initChangeTables(void) { 	status->ChangeFlagTable[SC_INCFLEE] |= SCB_FLEE; 	status->ChangeFlagTable[SC_INCFLEERATE] |= SCB_FLEE; 	status->ChangeFlagTable[SC_CRITICALPERCENT] |= SCB_CRI;+	status->ChangeFlagTable[SC_INCBASEATK] |= SCB_BATK; 	status->ChangeFlagTable[SC_INCASPDRATE] |= SCB_ASPD; 	status->ChangeFlagTable[SC_PLUSAVOIDVALUE] |= SCB_FLEE2; 	status->ChangeFlagTable[SC_INCMHPRATE] |= SCB_MAXHP;@@ -4522,6 +4523,8 @@ unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, 	if(sc->data[SC_GS_GATLINGFEVER]) 		batk += sc->data[SC_GS_GATLINGFEVER]->val3; #endif+	if(sc->data[SC_INCBASEATK])+		batk += sc->data[SC_INCBASEATK]->val1; 	if(sc->data[SC_BATKFOOD]) 		batk += sc->data[SC_BATKFOOD]->val1; 	if(sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 2)@@ -7456,6 +7459,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t 				if (sce->val2 > val2) 					return 0; 				break;+			case SC_HPDRAIN: 			case SC_S_LIFEPOTION: 			case SC_L_LIFEPOTION: 			case SC_CASH_BOSS_ALARM:@@ -7836,6 +7840,16 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t 				if (!val4) val4 = 1; 				tick_time = 10000; // [GodLesZ] tick time 				break;+			case SC_HPDRAIN:+				if( val1 == 0 ) return 0;+				// val1 = heal percent/amout+				// val2 = seconds between heals+				// val4 = total of heals+				if( val2 < 1 ) val2 = 1;+				if( (val4 = tick/(val2 * 1000)) < 1 )+					val4 = 1;+				tick = val2 * 1000; // val2 = Seconds between heals+				break; 			case SC_S_LIFEPOTION: 			case SC_L_LIFEPOTION: 				if( val1 == 0 ) return 0;@@ -10632,7 +10646,17 @@ int status_change_timer(int tid, int64 tick, int id, intptr_t data) { 				return 0; 			} 			break;-+		case SC_HPDRAIN:+			if( --(sce->val4) >= 0 ) {+				int flag, hp = (sce->val1 < 0) ? (int)(st->max_hp * -1 * sce->val1 / 100.) : sce->val1;+				map->freeblock_lock();+				status_fix_damage(NULL, bl, hp, 0);+				flag = !sc->data[type];+				map->freeblock_unlock();+				if( flag ) return 0;+				sc_timer_next((sce->val2 * 1000) + tick, status_change_timer, bl->id, data);+			}+		break; 		case SC_S_LIFEPOTION: 		case SC_L_LIFEPOTION: 			if( sd && --(sce->val4) >= 0 ) {diff --git a/src/map/status.h b/src/map/status.hindex 8028d8f..4ad2a95 100644--- a/src/map/status.h+++ b/src/map/status.h@@ -315,7 +315,7 @@ typedef enum sc_type { 	SC_HLIF_FLEET, 	SC_HLIF_SPEED, 	SC_HAMI_DEFENCE,-	SC_INCASPDRATE,+	SC_INCASPDRATE,	//248 	SC_PLUSAVOIDVALUE, 	SC_JAILED,	//250 	SC_ENCHANTARMS,@@ -331,7 +331,7 @@ typedef enum sc_type { 	SC_CASH_DEATHPENALTY, 	SC_CRITICALPERCENT, 	//SC_INCDEF,-	//SC_INCBASEATK = 264,+	SC_INCBASEATK = 264, 	//SC_FASTCAST, 	SC_PROTECT_MDEF = 266, 	//SC_HPREGEN,@@ -356,7 +356,7 @@ typedef enum sc_type { 	SC_REBIRTH, 	//SC_SKILLCASTRATE, //286 	//SC_DEFRATIOATK,-	//SC_HPDRAIN,+	SC_HPDRAIN = 288, 	//SC_SKILLATKBONUS, 	SC_ITEMSCRIPT = 290, 	SC_S_LIFEPOTION,

 

Share this post


Link to post
Share on other sites
  • 0

 

solved by myself

 

 

 

{	Id: 14586	AegisName: "Spark_Candy"	Name: "jumping candy"	Type: 2	Buy: 0	Weight: 10	Upper: 63	Delay: 180000	Trade: {		nodrop: true		noselltonpc: true	}	Script: <" 		sc_start SC_INCBASEATK,60000,20;		sc_start SC_INCASPDRATE,60000,25;		sc_start SC_ENDURE,60000,1;		sc_start4 SC_HPDRAIN,60000,100,10,0,0;	">},
adding required sc state

 

 

4d6a9494405c271534390ae72db713bf0dcaaee db/const.txt     |  2 ++ src/map/status.c | 26 +++++++++++++++++++++++++- src/map/status.h |  6 +++--- 3 files changed, 30 insertions(+), 4 deletions(-)diff --git a/db/const.txt b/db/const.txtindex fc1aa0f..88586ef 100644--- a/db/const.txt+++ b/db/const.txt@@ -953,6 +953,7 @@ SC_CASH_RECEIVEITEM	259 SC_CASH_BOSS_ALARM	260 SC_CASH_DEATHPENALTY	261 SC_CRITICALPERCENT	262+SC_INCBASEATK	264 SC_PROTECT_MDEF	266 SC_HEALPLUS	268 SC_PNEUMA	269@@ -971,6 +972,7 @@ SC_MER_SP	282 SC_MER_HIT	283 SC_MER_QUICKEN	284 SC_REBIRTH	285+SC_HPDRAIN	288 SC_ITEMSCRIPT	290 SC_S_LIFEPOTION	291 SC_L_LIFEPOTION	292diff --git a/src/map/status.c b/src/map/status.cindex 30907b5..340c598 100644--- a/src/map/status.c+++ b/src/map/status.c@@ -936,6 +936,7 @@ void initChangeTables(void) { 	status->ChangeFlagTable[SC_INCFLEE] |= SCB_FLEE; 	status->ChangeFlagTable[SC_INCFLEERATE] |= SCB_FLEE; 	status->ChangeFlagTable[SC_CRITICALPERCENT] |= SCB_CRI;+	status->ChangeFlagTable[SC_INCBASEATK] |= SCB_BATK; 	status->ChangeFlagTable[SC_INCASPDRATE] |= SCB_ASPD; 	status->ChangeFlagTable[SC_PLUSAVOIDVALUE] |= SCB_FLEE2; 	status->ChangeFlagTable[SC_INCMHPRATE] |= SCB_MAXHP;@@ -4522,6 +4523,8 @@ unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, 	if(sc->data[SC_GS_GATLINGFEVER]) 		batk += sc->data[SC_GS_GATLINGFEVER]->val3; #endif+	if(sc->data[SC_INCBASEATK])+		batk += sc->data[SC_INCBASEATK]->val1; 	if(sc->data[SC_BATKFOOD]) 		batk += sc->data[SC_BATKFOOD]->val1; 	if(sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 2)@@ -7456,6 +7459,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t 				if (sce->val2 > val2) 					return 0; 				break;+			case SC_HPDRAIN: 			case SC_S_LIFEPOTION: 			case SC_L_LIFEPOTION: 			case SC_CASH_BOSS_ALARM:@@ -7836,6 +7840,16 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t 				if (!val4) val4 = 1; 				tick_time = 10000; // [GodLesZ] tick time 				break;+			case SC_HPDRAIN:+				if( val1 == 0 ) return 0;+				// val1 = heal percent/amout+				// val2 = seconds between heals+				// val4 = total of heals+				if( val2 < 1 ) val2 = 1;+				if( (val4 = tick/(val2 * 1000)) < 1 )+					val4 = 1;+				tick = val2 * 1000; // val2 = Seconds between heals+				break; 			case SC_S_LIFEPOTION: 			case SC_L_LIFEPOTION: 				if( val1 == 0 ) return 0;@@ -10632,7 +10646,17 @@ int status_change_timer(int tid, int64 tick, int id, intptr_t data) { 				return 0; 			} 			break;-+		case SC_HPDRAIN:+			if( --(sce->val4) >= 0 ) {+				int flag, hp = (sce->val1 < 0) ? (int)(st->max_hp * -1 * sce->val1 / 100.) : sce->val1;+				map->freeblock_lock();+				status_fix_damage(NULL, bl, hp, 0);+				flag = !sc->data[type];+				map->freeblock_unlock();+				if( flag ) return 0;+				sc_timer_next((sce->val2 * 1000) + tick, status_change_timer, bl->id, data);+			}+		break; 		case SC_S_LIFEPOTION: 		case SC_L_LIFEPOTION: 			if( sd && --(sce->val4) >= 0 ) {diff --git a/src/map/status.h b/src/map/status.hindex 8028d8f..4ad2a95 100644--- a/src/map/status.h+++ b/src/map/status.h@@ -315,7 +315,7 @@ typedef enum sc_type { 	SC_HLIF_FLEET, 	SC_HLIF_SPEED, 	SC_HAMI_DEFENCE,-	SC_INCASPDRATE,+	SC_INCASPDRATE,	//248 	SC_PLUSAVOIDVALUE, 	SC_JAILED,	//250 	SC_ENCHANTARMS,@@ -331,7 +331,7 @@ typedef enum sc_type { 	SC_CASH_DEATHPENALTY, 	SC_CRITICALPERCENT, 	//SC_INCDEF,-	//SC_INCBASEATK = 264,+	SC_INCBASEATK = 264, 	//SC_FASTCAST, 	SC_PROTECT_MDEF = 266, 	//SC_HPREGEN,@@ -356,7 +356,7 @@ typedef enum sc_type { 	SC_REBIRTH, 	//SC_SKILLCASTRATE, //286 	//SC_DEFRATIOATK,-	//SC_HPDRAIN,+	SC_HPDRAIN = 288, 	//SC_SKILLATKBONUS, 	SC_ITEMSCRIPT = 290, 	SC_S_LIFEPOTION,

 

great, pull it to git =P

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.