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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...

Important Information

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