* Updated Acid Terror, Sword Reject, Double Strafe

* Replaced checking whether items can be refined or not with a new function
* Fixed npctalk outputting to chat [celest]
* Allowed some values in script_config to be customised in script_athena.conf

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@654 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
celest 2004-12-20 10:57:30 +00:00
parent b7690af868
commit 439a6b11ac
8 changed files with 87 additions and 13 deletions

View File

@ -1,5 +1,13 @@
Date Added 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 12/19
* Added -DFASTCHAR to char_sql for testing performance work * Added -DFASTCHAR to char_sql for testing performance work
before I merge it into the main running code [MouseJstr] before I merge it into the main running code [MouseJstr]

View File

@ -1,2 +1,14 @@
// When choosing those which it refines setting the letter which is indicated. (Those for word use other than Japanese?) // 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 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

View File

@ -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 )){ ((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 if(rand()%100 < (15*sc_data[SC_REJECTSWORD].val1)){ //反射確率は15*Lv
damage = damage*50/100; damage = damage*50/100;
clif_damage(bl,src,gettick(),0,0,damage,0,0,0);
battle_damage(bl,src,damage,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; damage2 = damage2*(100+ 20*skill_lv)/100;
break; break;
case AM_ACIDTERROR: // アシッドテラー case AM_ACIDTERROR: // アシッドテラー
hitrate = 1000000;
damage = damage*(100+ 40*skill_lv)/100; damage = damage*(100+ 40*skill_lv)/100;
damage2 = damage2*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100;
break; break;
@ -2542,6 +2544,7 @@ static struct Damage battle_calc_mob_weapon_attack(
damage2 = damage2*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100;
break; break;
case AM_ACIDTERROR: // アシッドテラー case AM_ACIDTERROR: // アシッドテラー
hitrate = 1000000;
damage = damage*(100+ 40*skill_lv)/100; damage = damage*(100+ 40*skill_lv)/100;
damage2 = damage2*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100;
break; break;
@ -3326,6 +3329,7 @@ static struct Damage battle_calc_pc_weapon_attack(
damage2 = damage2*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100;
break; break;
case AM_ACIDTERROR: // アシッドテラー case AM_ACIDTERROR: // アシッドテラー
hitrate = 1000000;
damage = damage*(100+ 40*skill_lv)/100; damage = damage*(100+ 40*skill_lv)/100;
damage2 = damage2*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100;
break; break;

View File

@ -7772,7 +7772,7 @@ int clif_message(struct block_list *bl, char* msg)
WBUFL(buf, 4) = bl->id; WBUFL(buf, 4) = bl->id;
memcpy(WBUFP(buf, 8), msg, msg_len); 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; return 0;
} }

View File

@ -41,6 +41,7 @@ static int itemdb_read_randomitem();
static int itemdb_read_itemavail(void); static int itemdb_read_itemavail(void);
static int itemdb_read_itemnametable(void); static int itemdb_read_itemnametable(void);
static int itemdb_read_noequip(void); static int itemdb_read_noequip(void);
static int itemdb_read_norefine(void);
void itemdb_reload(void); void itemdb_reload(void);
/*========================================== /*==========================================
@ -292,6 +293,7 @@ static void itemdb_read(void)
itemdb_read_randomitem(); itemdb_read_randomitem();
itemdb_read_itemavail(); itemdb_read_itemavail();
itemdb_read_noequip(); itemdb_read_noequip();
itemdb_read_norefine();
if (!battle_config.item_name_override_grffile) if (!battle_config.item_name_override_grffile)
itemdb_read_itemnametable(); itemdb_read_itemnametable();
@ -637,6 +639,31 @@ static int itemdb_read_noequip(void)
ShowStatus(tmp_output); ShowStatus(tmp_output);
return 0; 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 #ifndef TXT_ONLY
/*====================================== /*======================================
@ -870,6 +897,7 @@ static void itemdb_read(void)
itemdb_read_randomitem(); itemdb_read_randomitem();
itemdb_read_itemavail(); itemdb_read_itemavail();
itemdb_read_noequip(); itemdb_read_noequip();
itemdb_read_norefine();
itemdb_read_cardillustnametable(); itemdb_read_cardillustnametable();
if (!battle_config.item_name_override_grffile) if (!battle_config.item_name_override_grffile)
itemdb_read_itemnametable(); itemdb_read_itemnametable();

View File

@ -33,6 +33,7 @@ struct item_data {
unsigned no_equip : 3; unsigned no_equip : 3;
unsigned no_drop : 1; unsigned no_drop : 1;
unsigned no_use : 1; unsigned no_use : 1;
unsigned no_refine : 1; // [celest]
} flag; } flag;
int view_id; int view_id;
}; };

View File

@ -2921,10 +2921,13 @@ int buildin_getequipisenableref(struct script_state *st)
num=conv_num(st,& (st->stack->stack_data[st->start+2])); num=conv_num(st,& (st->stack->stack_data[st->start+2]));
sd=script_rid2sd(st); sd=script_rid2sd(st);
i=pc_checkequip(sd,equip[num-1]); 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]->def==1 && sd->inventory_data[i]->equip_script==NULL) || (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); push_val(st->stack,C_INT,1);
} else { } else {
@ -6983,7 +6986,25 @@ int script_config_read(char *cfgName)
if(strcmpi(w1,"refine_posword")==0) { if(strcmpi(w1,"refine_posword")==0) {
set_posword(w2); 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); script_config_read(w2);
} }
} }

View File

@ -5435,7 +5435,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
case BA_WHISTLE: /* 口笛 */ case BA_WHISTLE: /* 口笛 */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_NOENEMY; target=BCT_NOENEMY;
if(src->type == BL_PC) if(src->type == BL_PC)
val1 = (pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON)+1)>>1; 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: /* ハミング */ case DC_HUMMING: /* ハミング */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_NOENEMY; target=BCT_NOENEMY;
if(src->type == BL_PC) if(src->type == BL_PC)
val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1; 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: /* 自分勝手なダンス */ case DC_UGLYDANCE: /* 自分勝手なダンス */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_ENEMY; target=BCT_ENEMY;
break; break;
case DC_DONTFORGETME: /* 私を忘れないで… */ case DC_DONTFORGETME: /* 私を忘れないで… */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_ENEMY; target=BCT_ENEMY;
if(src->type == BL_PC) if(src->type == BL_PC)
val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1; 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: /* ブラギの詩 */ case BA_POEMBRAGI: /* ブラギの詩 */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_NOENEMY; target=BCT_NOENEMY;
if(src->type == BL_PC) if(src->type == BL_PC)
val1 = pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON); 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: /* イドゥンの林檎 */ case BA_APPLEIDUN: /* イドゥンの林檎 */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_NOENEMY; target=BCT_NOENEMY;
if(src->type == BL_PC) if(src->type == BL_PC)
val1 = ((pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON))&0xffff)<<16; 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: /* サ?ビスフォ?ユ? */ case DC_SERVICEFORYOU: /* サ?ビスフォ?ユ? */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_PARTY; target=BCT_PARTY;
if(src->type == BL_PC) if(src->type == BL_PC)
val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1; 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: /* 夕陽のアサシンクロス */ case BA_ASSASSINCROSS: /* 夕陽のアサシンクロス */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_NOENEMY; target=BCT_NOENEMY;
if(src->type == BL_PC) if(src->type == BL_PC)
val1 = (pc_checkskill((struct map_session_data *)src,BA_MUSICALLESSON)+1)>>1; 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: /* 幸運のキス */ case DC_FORTUNEKISS: /* 幸運のキス */
count=49; count=49;
limit=skill_get_time(skillid,skilllv); limit=skill_get_time(skillid,skilllv);
range=5; range=3;
target=BCT_NOENEMY; target=BCT_NOENEMY;
if(src->type == BL_PC) if(src->type == BL_PC)
val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1; val1 = (pc_checkskill((struct map_session_data *)src,DC_DANCINGLESSON)+1)>>1;