* Fixed TaTaMiGaEShi(Improvised Defense) not working.

* Implemented new cooking success formula. Now cooking experience starts at 0.(bugreport:2439)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13881 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
Inkfish 2009-06-11 13:29:43 +00:00
parent 042688ca7a
commit a936c021c7
5 changed files with 36 additions and 31 deletions

View File

@ -3,6 +3,9 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
09/06/11
* Fixed TaTaMiGaEShi(Improvised Defense) not working. [Inkfish]
* Implemented new cooking success formula. Now cooking experience starts at 0.(bugreport:2439) [Inkfish]
09/06/09
* Fixed applying autocasts with negative rate before the positive one made it fail to remove the autocast. [Inkfish]
09/06/08

View File

@ -0,0 +1 @@
DELETE FROM `global_reg_value` WHERE `str`='COOKING_ATTEMPT';

View File

@ -972,7 +972,7 @@ int pc_reg_received(struct map_session_data *sd)
sd->kafraPoints = pc_readaccountreg(sd,"#KAFRAPOINTS");
// Cooking Exp
sd->cooking_attempt = pc_readglobalreg(sd,"COOKING_ATTEMPT");
sd->cook_mastery = pc_readglobalreg(sd,"COOK_MASTERY");
if( (sd->class_&MAPID_BASEMASK) == MAPID_TAEKWON )
{ // Better check for class rather than skill to prevent "skill resets" from unsetting this
@ -6445,10 +6445,10 @@ int pc_setregistry(struct map_session_data *sd,const char *reg,int val,int type)
if( i )
status_calc_pc(sd,0); // Lost the bonus.
}
else if( !strcmp(reg,"COOKING_ATTEMPT") && sd->cooking_attempt != val )
else if( !strcmp(reg,"COOK_MASTERY") && sd->cook_mastery != val )
{
val = cap_value(val, 0, 400);
sd->cooking_attempt = val;
val = cap_value(val, 0, 1999);
sd->cook_mastery = val;
}
sd_reg = sd->save_reg.global;
max = &sd->save_reg.global_num;

View File

@ -177,7 +177,7 @@ struct map_session_data {
short skillitem,skillitemlv;
short skillid_old,skilllv_old;
short skillid_dance,skilllv_dance;
short cooking_attempt; // max: 400 [Inkfish]
short cook_mastery; // range: [0,1999] [Inkfish]
unsigned char blockskill[MAX_SKILL];
int cloneskill_id;
int menuskill_id, menuskill_val;

View File

@ -6333,7 +6333,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
}
break;
case NJ_SHADOWJUMP:
{
if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground )
{ //You don't move on GVG grounds.
unit_movepos(src, x, y, 1, 0);
@ -6341,7 +6340,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
}
if (sc && sc->data[SC_HIDING])
status_change_end(src, SC_HIDING, -1);
}
break;
case AM_SPHEREMINE:
case AM_CANNIBALIZE:
@ -10425,17 +10423,6 @@ static int skill_unit_timer_sub (DBKey key, void* data, va_list ap)
}
}
break;
case UNT_TATAMIGAESHI:
if( unit->range >= 0 )
{ //Disable processed cell.
unit->range = -1;
if (--group->val1 <= 0) // number of live cells
{ //All tiles were processed, disable skill.
group->target_flag=BCT_NOONE;
group->bl_flag= BL_NUL;
}
}
break;
}
}
@ -10455,10 +10442,14 @@ static int skill_unit_timer_sub (DBKey key, void* data, va_list ap)
if(unit->range == -1) //Unit disabled, but it should not be deleted yet.
group->unit_id = UNT_USED_TRAPS;
if( !unit->alive )
if( group->unit_id == UNT_TATAMIGAESHI )
{
if( dissonance ) skill_dance_switch(unit, 1);
return 0;
unit->range = -1; //Disable processed cell.
if (--group->val1 <= 0) // number of live cells
{ //All tiles were processed, disable skill.
group->target_flag=BCT_NOONE;
group->bl_flag= BL_NUL;
}
}
}
@ -10774,6 +10765,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
{
int slot[3];
int i,sc,ele,idx,equip,wlv,make_per,flag;
int num = -1; // exclude the recipe
struct status_data *status;
nullpo_retr(0, sd);
@ -10815,6 +10807,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
int j,id,x;
if( (id=skill_produce_db[idx].mat_id[i]) <= 0 )
continue;
num++;
x=qty*skill_produce_db[idx].mat_amount[i];
do{
int y=0;
@ -10917,12 +10910,14 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
if (sd->menuskill_val >= 15) //Legendary Cooking Set.
make_per = 10000; //100% Success
else
make_per = 1200*(sd->menuskill_val-10) //12% chance per set level.
+ 1000 - 500*(skill_produce_db[idx].itemlv-10) //10% - 5% per dish level
+ 20*status->dex + 10*status->luk //0.2% per DEX, 0.1% per LUK
+ 5*sd->cooking_attempt; //+0.05% per try
if( sd->cooking_attempt < 400 )
pc_setglobalreg(sd, "COOKING_ATTEMPT", sd->cooking_attempt+1);
make_per = 1200 * (sd->menuskill_val - 10)
+ 20 * (sd->status.base_level + 1)
+ 20 * (status->dex + 1)
+ 100 * (rand()%(30+5*(sd->cook_mastery/400) - (6+sd->cook_mastery/80)) + (6+sd->cook_mastery/80))
- 400 * (skill_produce_db[idx].itemlv - 11 + 1)
- 10 * (100 - status->luk + 1)
- 500 * (num - 1)
- 100 * (rand()%4 + 1);
break;
}
make_per = 5000;
@ -11056,9 +11051,12 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
clif_misceffect(&sd->bl,3);
break;
default: //Those that don't require a skill?
if (skill_produce_db[idx].itemlv>10 &&
skill_produce_db[idx].itemlv<= 20) //Cooking items.
if( skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20)
{ //Cooking items.
clif_specialeffect(&sd->bl, 608, AREA);
if( sd->cook_mastery < 1999 )
pc_setglobalreg(sd, "COOK_MASTERY",sd->cook_mastery + ( 1 << ( (skill_produce_db[idx].itemlv - 11) / 2 ) ) * 5);
}
break;
}
}
@ -11097,9 +11095,12 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
clif_misceffect(&sd->bl,2);
break;
default:
if (skill_produce_db[idx].itemlv>10 &&
skill_produce_db[idx].itemlv<= 20) //Cooking items.
if( skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20 )
{ //Cooking items.
clif_specialeffect(&sd->bl, 609, AREA);
if( sd->cook_mastery > 0 )
pc_setglobalreg(sd, "COOK_MASTERY", sd->cook_mastery - ( 1 << ((skill_produce_db[idx].itemlv - 11) / 2) ) - ( ( ( 1 << ((skill_produce_db[idx].itemlv - 11) / 2) ) >> 1 ) * 3 ));
}
}
}
return 0;