diff options
-rw-r--r-- | Changelog.txt | 8 | ||||
-rw-r--r-- | conf-tmpl/script_athena.conf | 12 | ||||
-rw-r--r-- | src/map/battle.c | 4 | ||||
-rw-r--r-- | src/map/clif.c | 2 | ||||
-rw-r--r-- | src/map/itemdb.c | 28 | ||||
-rw-r--r-- | src/map/itemdb.h | 1 | ||||
-rw-r--r-- | src/map/script.c | 27 | ||||
-rw-r--r-- | src/map/skill.c | 18 |
8 files changed, 87 insertions, 13 deletions
diff --git a/Changelog.txt b/Changelog.txt index ed6542de7..9dc32511a 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,13 @@ Date Added +12/20 + * Updated Acid Terror - should never miss [celest] + * updated Sword Reject - should display reflected damage properly now [celest] + * Updated Double Strafe - should only work with bows [celest] + * Replaced checking whether items can be refined or not with a new function [celest] + * Added Gengar's fix for npctalk outputting to chat [celest] + * Allowed some values in script_config to be customised in script_athena.conf [celest] + 12/19 * Added -DFASTCHAR to char_sql for testing performance work before I merge it into the main running code [MouseJstr] diff --git a/conf-tmpl/script_athena.conf b/conf-tmpl/script_athena.conf index 21d4a6f45..45ee734f7 100644 --- a/conf-tmpl/script_athena.conf +++ b/conf-tmpl/script_athena.conf @@ -1,2 +1,14 @@ // When choosing those which it refines setting the letter which is indicated. (Those for word use other than Japanese?) refine_posword: Head,Body,Left hand,Right hand,Robe,Shoes,Accessory 1,Accessory 2,Head 2,Head 3,Not Equipped + +warn_func_no_comma: yes + +warn_cmd_no_comma: yes + +warn_func_mismatch_paramnum: yes + +warn_cmd_mismatch_paramnum: yes + +check_cmdcount: 8192 + +check_gotocount: 512
\ No newline at end of file diff --git a/src/map/battle.c b/src/map/battle.c index c43e9bb61..ba8d22197 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1608,6 +1608,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i ((src->type==BL_PC && ((struct map_session_data *)src)->status.weapon == (1 || 2 || 3)) || src->type==BL_MOB )){ if(rand()%100 < (15*sc_data[SC_REJECTSWORD].val1)){ //反射確率は15*Lv damage = damage*50/100; + clif_damage(bl,src,gettick(),0,0,damage,0,0,0); battle_damage(bl,src,damage,0); //ダメージを与えたのは良いんだが、ここからどうして表示するんだかわかんねぇ //エフェクトもこれでいいのかわかんねぇ @@ -2048,6 +2049,7 @@ static struct Damage battle_calc_pet_weapon_attack( damage2 = damage2*(100+ 20*skill_lv)/100; break; case AM_ACIDTERROR: // アシッドテラー + hitrate = 1000000; damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; @@ -2542,6 +2544,7 @@ static struct Damage battle_calc_mob_weapon_attack( damage2 = damage2*(100+ 20*skill_lv)/100; break; case AM_ACIDTERROR: // アシッドテラー + hitrate = 1000000; damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; @@ -3326,6 +3329,7 @@ static struct Damage battle_calc_pc_weapon_attack( damage2 = damage2*(100+ 20*skill_lv)/100; break; case AM_ACIDTERROR: // アシッドテラー + hitrate = 1000000; damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; diff --git a/src/map/clif.c b/src/map/clif.c index 1f7130676..7eb2670ae 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7772,7 +7772,7 @@ int clif_message(struct block_list *bl, char* msg) WBUFL(buf, 4) = bl->id; memcpy(WBUFP(buf, 8), msg, msg_len); - clif_send(buf, WBUFW(buf,2), bl, AREA); + clif_send(buf, WBUFW(buf,2), bl, AREA_CHAT_WOC); // by Gengar return 0; } diff --git a/src/map/itemdb.c b/src/map/itemdb.c index a68afd61f..a68fb3664 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -41,6 +41,7 @@ static int itemdb_read_randomitem(); static int itemdb_read_itemavail(void); static int itemdb_read_itemnametable(void); static int itemdb_read_noequip(void); +static int itemdb_read_norefine(void); void itemdb_reload(void); /*========================================== @@ -292,6 +293,7 @@ static void itemdb_read(void) itemdb_read_randomitem(); itemdb_read_itemavail(); itemdb_read_noequip(); + itemdb_read_norefine(); if (!battle_config.item_name_override_grffile) itemdb_read_itemnametable(); @@ -637,6 +639,31 @@ static int itemdb_read_noequip(void) ShowStatus(tmp_output); return 0; } + +/*================================================ + * Whether the item can be refined or not [Celest] + *------------------------------------------------ + */ +static int itemdb_read_norefine(void) +{ + int i, nameid; + struct item_data *id; + // To-do: let it read from a text file later + int cant_refine[] = { + 0, 1243, 1530, 2110, 2112, 2264, 2298, 2352, 2410, 2413, + 2414, 2509, 2510, 5008, 5046, 5049, 5050, 5053, 5055, 5098 + }; + + for (i=0; i < (int)(sizeof(cant_refine) / sizeof(cant_refine[0])); i++) { + nameid = cant_refine[i]; + if(nameid<=0 || nameid>=20000 || !(id=itemdb_exists(nameid))) + continue; + id->flag.no_refine = 1; + } + + return 1; +} + #ifndef TXT_ONLY /*====================================== @@ -870,6 +897,7 @@ static void itemdb_read(void) itemdb_read_randomitem(); itemdb_read_itemavail(); itemdb_read_noequip(); + itemdb_read_norefine(); itemdb_read_cardillustnametable(); if (!battle_config.item_name_override_grffile) itemdb_read_itemnametable(); diff --git a/src/map/itemdb.h b/src/map/itemdb.h index 0edfad243..9ff3981a2 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -33,6 +33,7 @@ struct item_data { unsigned no_equip : 3; unsigned no_drop : 1; unsigned no_use : 1; + unsigned no_refine : 1; // [celest] } flag; int view_id; }; diff --git a/src/map/script.c b/src/map/script.c index bf6c577cb..5c6b89092 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -2921,10 +2921,13 @@ int buildin_getequipisenableref(struct script_state *st) num=conv_num(st,& (st->stack->stack_data[st->start+2])); sd=script_rid2sd(st); i=pc_checkequip(sd,equip[num-1]); - if(i >= 0 && num<7 && sd->inventory_data[i] && (num!=1 + if(i >= 0 && num<7 && sd->inventory_data[i] && !sd->inventory_data[i]->flag.no_refine) + // replaced by Celest + /*(num!=1 || sd->inventory_data[i]->def > 1 || (sd->inventory_data[i]->def==1 && sd->inventory_data[i]->equip_script==NULL) - || (sd->inventory_data[i]->def<=0 && sd->inventory_data[i]->equip_script!=NULL))) + || (sd->inventory_data[i]->def<=0 && sd->inventory_data[i]->equip_script!=NULL)))*/ + { push_val(st->stack,C_INT,1); } else { @@ -6983,7 +6986,25 @@ int script_config_read(char *cfgName) if(strcmpi(w1,"refine_posword")==0) { set_posword(w2); } - if(strcmpi(w1,"import")==0){ + else if(strcmpi(w1,"warn_func_no_comma")==0) { + script_config.warn_func_no_comma = battle_config_switch(w2); + } + else if(strcmpi(w1,"warn_cmd_no_comma")==0) { + script_config.warn_cmd_no_comma = battle_config_switch(w2); + } + else if(strcmpi(w1,"warn_func_mismatch_paramnum")==0) { + script_config.warn_func_mismatch_paramnum = battle_config_switch(w2); + } + else if(strcmpi(w1,"warn_cmd_mismatch_paramnum")==0) { + script_config.warn_cmd_mismatch_paramnum = battle_config_switch(w2); + } + else if(strcmpi(w1,"check_cmdcount")==0) { + script_config.check_cmdcount = battle_config_switch(w2); + } + else if(strcmpi(w1,"check_gotocount")==0) { + script_config.check_gotocount = battle_config_switch(w2); + } + else if(strcmpi(w1,"import")==0){ script_config_read(w2); } } diff --git a/src/map/skill.c b/src/map/skill.c index 1f0e689f4..273b14f1a 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5435,7 +5435,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, case BA_WHISTLE: /* 口笛 */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_NOENEMY; if(src->type == BL_PC) val1 = (pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON)+1)>>1; @@ -5445,7 +5445,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, case DC_HUMMING: /* ハミング */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_NOENEMY; if(src->type == BL_PC) val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1; @@ -5456,14 +5456,14 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, case DC_UGLYDANCE: /* 自分勝手なダンス */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_ENEMY; break; case DC_DONTFORGETME: /* 私を忘れないで… */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_ENEMY; if(src->type == BL_PC) val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1; @@ -5473,7 +5473,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, case BA_POEMBRAGI: /* ブラギの詩 */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_NOENEMY; if(src->type == BL_PC) val1 = pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON); @@ -5483,7 +5483,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, case BA_APPLEIDUN: /* イドゥンの林檎 */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_NOENEMY; if(src->type == BL_PC) val1 = ((pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON))&0xffff)<<16; @@ -5495,7 +5495,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, case DC_SERVICEFORYOU: /* サ?ビスフォ?ユ? */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_PARTY; if(src->type == BL_PC) val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1; @@ -5504,7 +5504,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, case BA_ASSASSINCROSS: /* 夕陽のアサシンクロス */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_NOENEMY; if(src->type == BL_PC) val1 = (pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON)+1)>>1; @@ -5513,7 +5513,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, case DC_FORTUNEKISS: /* 幸運のキス */ count=49; limit=skill_get_time(skillid,skilllv); - range=5; + range=3; target=BCT_NOENEMY; if(src->type == BL_PC) val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1; |