summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog.txt5
-rw-r--r--src/map/battle.c5
-rw-r--r--src/map/script.c44
-rw-r--r--src/map/skill.c20
4 files changed, 62 insertions, 12 deletions
diff --git a/Changelog.txt b/Changelog.txt
index fb51be5cb..00233f8f4 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,4 +1,9 @@
Date Added
+12/6
+ * Updated Chase Walk [celest]
+ * Added 'checkoption2' and 'checkoption3' script functions - Refer to
+ /npc/sample/npc_testchkoption.txt for similiar examples [celest]
+
12/5
* Fixed another crash sending updates to disconnected
clients [MouseJstr]
diff --git a/src/map/battle.c b/src/map/battle.c
index a66ddb870..973878529 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -4962,13 +4962,14 @@ int battle_check_range(struct block_list *src,struct block_list *bl,int range)
if( range>0 && range < arange ) {// 遠すぎる
// be lenient if the skill was cast before we have moved to the correct position [Celest]
- if (src->type == BL_PC && bl->type == BL_PC) {
+ /* Celest: Hmm, bl isn't necessarily BL_PC... i think i'll test this more first >.< */
+ /*if (src->type == BL_PC && bl->type == BL_PC) {
struct map_session_data *sd;
nullpo_retr(0, (sd=(struct map_session_data *)bl));
if (sd->walktimer != -1 && !((arange-=battle_config.skill_range_leniency)<=range))
return 0;
}
- else return 0;
+ else*/ return 0;
}
if( arange<2 ) // 同じマスか隣接
diff --git a/src/map/script.c b/src/map/script.c
index f198d42fe..6a6b0c932 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -289,6 +289,8 @@ int buildin_npcspeed(struct script_state *st); // [Valaris]
int buildin_npcwalkto(struct script_state *st); // [Valaris]
int buildin_npcstop(struct script_state *st); // [Valaris]
int buildin_getmapxy(struct script_state *st); //get map position for player/npc/pet/mob by Lorky [Lupus]
+int buildin_checkoption2(struct script_state *st); // [celest]
+int buildin_checkoption3(struct script_state *st); // [celest]
void push_val(struct script_stack *stack,int type,int val);
@@ -499,6 +501,8 @@ struct {
{buildin_npcwalkto,"npcwalkto","ii"}, // [Valaris]
{buildin_npcstop,"npcstop",""}, // [Valaris]
{buildin_getmapxy,"getmapxy","siii*"}, //by Lorky [Lupus]
+ {buildin_checkoption2,"checkoption2","i"},
+ {buildin_checkoption3,"checkoption3","i"},
{NULL,NULL,NULL},
};
int buildin_message(struct script_state *st); // [MouseJstr]
@@ -3299,6 +3303,46 @@ int buildin_checkoption(struct script_state *st)
return 0;
}
+/*==========================================
+ *
+ *------------------------------------------
+ */
+int buildin_checkoption2(struct script_state *st)
+{
+ int type;
+ struct map_session_data *sd;
+
+ type=conv_num(st,& (st->stack->stack_data[st->start+2]));
+ sd=script_rid2sd(st);
+
+ if(sd->opt2 & type){
+ push_val(st->stack,C_INT,1);
+ } else {
+ push_val(st->stack,C_INT,0);
+ }
+
+ return 0;
+}
+/*==========================================
+ *
+ *------------------------------------------
+ */
+int buildin_checkoption3(struct script_state *st)
+{
+ int type;
+ struct map_session_data *sd;
+
+ type=conv_num(st,& (st->stack->stack_data[st->start+2]));
+ sd=script_rid2sd(st);
+
+ if(sd->opt3 & type){
+ push_val(st->stack,C_INT,1);
+ } else {
+ push_val(st->stack,C_INT,0);
+ }
+
+ return 0;
+}
/*==========================================
*
diff --git a/src/map/skill.c b/src/map/skill.c
index 19e84d791..ba8991e52 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -234,9 +234,7 @@ int SkillStatusChangeTable[]={ /* skill.hのenumのSC_***とあわせること */
SC_GOSPEL,
/* 370- */
-1,-1,-1,-1,-1,-1,-1,-1,
-
SC_EDP,
-
-1,
/* 380- */
SC_TRUESIGHT,
@@ -1080,7 +1078,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
if(pc_steal_item(sd,bl))
clif_skill_nodamage(src,bl,TF_STEAL,skill2,1);
else if (battle_config.display_snatcher_skill_fail)
- clif_skill_fail(sd,skillid,0,0); // it's annoying! =p [Celest]
+ clif_skill_fail(sd,skillid,0,0);
}
// エンチャントデットリ?ポイズン(猛毒?果)
if (sd && sd->sc_data[SC_EDP].timer != -1 && rand() % 10000 < sd->sc_data[SC_EDP].val2 * sc_def_vit) {
@@ -1151,7 +1149,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
struct status_change *sc_data = battle_get_sc_data(bl);
if(sc_data) {
sc_data[SC_FREEZE].val3++;
- if(sc_data[SC_FREEZE].val3 >= 3 && rand()%1000 < skilllv*sc_def_mdef/100)
+ if(sc_data[SC_FREEZE].val3 >= 3)
skill_status_change_start(bl,SC_FREEZE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
}
}
@@ -3592,11 +3590,11 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
clif_skill_nodamage(src,bl,skillid,-1,1);
if( tsc_data ){
if( tsc_data[sc].timer==-1 )
- /* 付加する */
- skill_status_change_start(bl,sc,skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
- else
- /* 解除する */
- skill_status_change_end(bl, sc, -1);
+ /* 付加する */
+ skill_status_change_start(bl,sc,skilllv,0,0,0,skill_get_time(skillid,skilllv),0);
+ else
+ /* 解除する */
+ skill_status_change_end(bl, sc, -1);
}
}
break;
@@ -7343,7 +7341,9 @@ int skill_use_id( struct map_session_data *sd, int target_id,
if( sd->opt1>0 )
return 0;
if(sc_data){
- if(sc_data[SC_CHASEWALK].timer != -1) return 0;
+ // allow to use only Chasewalk [celest]
+ if(sc_data[SC_CHASEWALK].timer != -1 && skill_num != ST_CHASEWALK)
+ return 0;
if(sc_data[SC_VOLCANO].timer != -1){
if(skill_num==WZ_ICEWALL) return 0;
}