From ee93ce7a37a5ea542ecc5ec32bc8a9499b75a739 Mon Sep 17 00:00:00 2001 From: celest Date: Tue, 7 Dec 2004 08:16:25 +0000 Subject: - Shooting skills will now need arrows * Added 'guildgetexp' script command * Added bLongAtkRate item effect * Updated Bow Thimble, Archer Skeleton Card, Tribal Solidarity, Sleipnir, Brisingamen, Mjolnir, Megingord, Counter Dagger, Poison Knife * Updated SP requirements for Full Strip, Full Chemical Protection, Cannibalize git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@485 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog.txt | 7 +++++++ db/Changelog.txt | 5 +++++ db/const.txt | 6 ++++++ db/item_db.txt | 18 +++++++++--------- db/skill_require_db.txt | 6 +++--- src/map/guild.c | 24 ++++++++++++++++++++++++ src/map/guild.h | 1 + src/map/map.h | 3 ++- src/map/pc.c | 4 ++++ src/map/script.c | 22 +++++++++++++++++++++- src/map/skill.c | 17 +++++++++++++++++ 11 files changed, 99 insertions(+), 14 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 11ece3586..7feb8b092 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,4 +1,11 @@ Date Added +12/7 + * Skill Updates [celest] + - Arrow Shower, Double Strafing, Charge Arrow, Throw Arrow, Sharp Shooting, + Arrow Vulcan, and Musical Strike now take arrows when used + * Added 'guildgetexp' script command [celest] + * Added bLongAtkRate item effect [celest] + 12/6 * Fixed file props for new npcs [MouseJstr] * Fixed weddings.txt as per Fress_Boy [MouseJstr] diff --git a/db/Changelog.txt b/db/Changelog.txt index d72040714..64beb7846 100644 --- a/db/Changelog.txt +++ b/db/Changelog.txt @@ -5,6 +5,11 @@ Ayathoya items == Added but no effect ( all are "ect" itens) Skill databases == celest working on them i believe. +12/7 * Added effect for Bow Thimble, Archer Skeleton Card and Tribal Solidarity [celest] + * Updated Sleipnir, Brisingamen, Mjolnir, Megingord, Counter Dagger, + Poison Knife [celest] + * Updated SP requirements for Full Strip, Full Chemical Protection, Cannibalize [celest] + 12/6 * Changed spiritball requirements for Chain Crush to 1, thanks to MaoMao of cAthena 12/5 * Edited skill_nocast_db - the skills should be useable outside GvG maps even diff --git a/db/const.txt b/db/const.txt index b382bc75f..a90cd2ba1 100644 --- a/db/const.txt +++ b/db/const.txt @@ -213,6 +213,8 @@ bAgiDexStr 1075 bPerfectHide 1076 bDisguise 1077 bClassChange 1078 +bHPDrainValue 1079 +bSPDrainValue 1080 bRestartFullRecover 2000 bNoCastCancel 2001 @@ -222,6 +224,10 @@ bNoWeaponDamage 2004 bNoGemStone 2005 bNoCastCancel2 2006 bInfiniteEndure 2007 +bUnbreakableWeapon 2008 +bUnbreakableArmor 2009 +bUnbreakableHelm 2010 +bLongAtkRate 2011 Eff_Stone 0 diff --git a/db/item_db.txt b/db/item_db.txt index c16cfb529..86344fa87 100644 --- a/db/item_db.txt +++ b/db/item_db.txt @@ -127,7 +127,7 @@ 645,Concentration_Potion,Concentration Potion,2,800,0,100,,,,,10477567,2,,,,,{ sc_start SC_SpeedPot0,1800,0; },{} 656,Awakening_Potion,Awakening Potion,2,1500,0,150,,,,,8904431,2,,,40,,{ sc_start SC_SpeedPot1,1800,0; },{} 657,Berserk_Potion,Berserk Potion,2,3000,0,200,,,,,410786,2,,,85,,{ sc_start SC_SpeedPot2,1800,0; },{} -658,Tribal_Solidarity,Tribal Solidarity,3,1000,0,500,,,,,,,,,,,{},{} +658,Tribal_Solidarity,Tribal Solidarity,2,1000,0,500,,,,,10477567,2,,,,,{ guildgetexp rand(1,10000); },{} 659,Her_Heart,Her Heart,2,500,0,50,,,,,10477567,2,,,,,{ pet 1188; },{},, 660,Forbidden_Red_Candle,Red Candle,2,20,0,50,,,,,10477567,2,,,,,{ pet 1200; },{},, 661,Sky_Apron,Soft Apron,2,20,0,50,,,,,10477567,2,,,,,{ pet 1275; },{} @@ -516,10 +516,10 @@ 1236,Sucsamad,Sucsamad,4,20,0,800,140,,1,0,2055918,2,2,4,36,1,{},{ bonus2 bAddEle,2,10; bonus2 bAddEle,4,10; bonus bUnbreakable,100; },, 1237,Grimtooth_,Grimtooth,4,20,0,800,180,,1,0,2055918,2,2,4,36,1,{},{ bonus bFlee,10; bonus bFlee2,5; bonus bDefRate,-50; bonus bDef2Rate,-50; },, 1238,Zeny_Knife,Zeny Knife,4,20,0,1200,64,,1,0,2055918,2,2,3,40,1,{},{ bonus bGetZenyNum,100; },,,,, -1239,Poison_Knife,Poison Knife,4,20,0,800,64,,1,0,2055918,2,2,3,65,1,{},{ bonus bAtkEle,5; bonus2 bAddEff,Eff_Poison,2000; },,,,, +1239,Poison_Knife,Poison Knife,4,20,0,800,64,,1,0,2055918,2,2,3,65,1,{},{ bonus bAtkEle,5; bonus2 bAddEff,Eff_Poison,3000; },,,,, 1240,Princess_Knife,Princess Knife,4,20,0,400,84,,1,0,2055918,2,2,4,1,1,{},{ bonus bAllStats,1; } 1241,Cursed_Dagger,Cursed Dagger,4,20,0,400,55,,1,0,66052,2,2,4,85,1,{},{ bonus2 bAddEff,Eff_Curse,500; },,,, -1242,Counter_Dagger,Counter Dagger,4,20,0,550,75,,1,0,66052,2,2,4,55,1,{},{ bonus bCritical,5; bonus3 bAutoSpell,61,1,25; },,,,, +1242,Counter_Dagger,Counter Dagger,4,20,0,550,75,,1,0,66052,2,2,4,55,1,{},{ bonus bCritical,90; bonus3 bAutoSpell,61,1,25; },,,,, 1243,Main_Gauche_For_Novice,Novice Main Gauche,4,20,0,1,45,,1,0,8388609,2,2,1,1,1,{},{},,,,,, // Katars 1250,Jur,Jur,4,19500,0,800,125,,1,2,4096,2,34,2,18,16,{},{},,,,,, @@ -632,7 +632,7 @@ 1527,Quadrille,Quadrille,4,20,0,900,165,,1,0,33040,2,2,4,40,8,{},{ bonus2 bAddRace,1,10; bonus2 bAddRace,7,10; bonus2 bAddEle,2,10; } 1528,Grand_Cross,Grand Cross,4,20,0,1500,140,,1,0,33040,2,2,4,40,8,{},{ bonus bAtkEle,6; skill 77,3; bonus3 bAutoSpell,77,3,25; bonus2 bHPDrainRate,100,1; }, 1529,Iron_Driver,Iron Driver,4,20,0,3000,155,,1,0,33024,2,2,3,78,8,{},{},,,,,, -1530,Mjolnir,Mjolnir,4,20,0,6000,250,,1,0,8701363,2,2,4,98,8,{},{ bonus bAtkEle,4; bonus bDex,40; bonus bStr,15; bonus bAspdRate,30; },, +1530,Mjolnir,Mjolnir,4,20,0,6000,250,,1,0,8701363,2,2,4,95,8,{},{ bonus bAtkEle,4; bonus bDex,40; bonus bStr,15; bonus bAspdRate,30; },, 1531,Spanner,Spanner,4,20,0,2500,115,,1,0,33040,2,2,3,55,8,{},{ bonus2 bAddEff,Eff_Blind,100; bonus2 bAddEff,Eff_Stan,100; bonus2 bAddEff,Eff_Poison,100; bonus2 bAddEff,Eff_Freeze,100; },,,,,, // Books 1550,Book,Book,4,30000,0,600,85,,1,3,65792,2,2,2,14,15,{},{},,,,,, @@ -938,7 +938,7 @@ 2407,Crystal_Pumps,Crystal Pumps,5,20,0,100,,0,,0,10477567,0,64,,0,0,{},{ bonus bMdef,10; bonus bLuk,5; } 2408,Cuffs,Cuffs,5,5000,0,3000,,3,,0,10477567,2,64,,0,0,{},{} 2409,Spiky_Heel,Spiky Heel,5,8500,0,600,,2,,0,10477567,2,64,,0,0,{},{ bonus bMdef,5; } -2410,Sleipnir,Sleipnir,5,20,0,3500,,0,,0,10477567,2,64,,95,0,{},{ bonus bMdef,10; bonus bMaxHPrate,10; bonus bMaxSPrate,10; bonus bSPrecovRate,15; bonus bSpeedRate,25; } +2410,Sleipnir,Sleipnir,5,20,0,3500,,5,,0,10477567,2,64,,94,0,{},{ bonus bMdef,10; bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bSPrecovRate,15; bonus bSpeedRate,25; } 2411,Greaves,Greaves,5,48000,0,750,,5,,0,16512,2,64,,65,0,{},{},,,, 2412,Greaves_,Greaves,5,48000,0,750,,5,,1,16512,2,64,,65,0,{},{},,,, 2413,Safety_Shoes,Safety Shoes,5,20,0,350,,6,,0,16514,2,64,,30,0,{},{},,,, @@ -977,7 +977,7 @@ 2616,Critical_Ring,Critical Ring,5,75000,0,100,,0,,0,10477567,2,136,,40,0,{},{ bonus bCritical,5; },,,, 2617,Celebrant's_Mitten,Celebrant's Mitten,5,20,0,100,,1,,0,10477567,2,136,,35,0,{},{ bonus bInt,1; },,,, 2618,Matyr's_Leash,Matyr's Leash,5,20,0,100,,1,,0,10477567,2,136,,35,0,{},{ bonus bAgi,1; },,,, -2619,Thimble_Of_Archer,Bow Thimble,5,30000,0,100,,0,,0,1574920,2,136,,65,0,{},{},,,,, +2619,Thimble_Of_Archer,Bow Thimble,5,30000,0,100,,0,,0,1574920,2,136,,65,0,{},{ bonus bLongAtkRate,10; },,,,, 2620,Ring_Of_Rogue,Rogue's Treasure,5,30000,0,100,,0,,0,135232,2,136,,70,0,{},{ bonus bAddStealRate,100; },,,,, 2621,Ring_,Ancient Ring,5,30000,0,200,,0,,1,10477567,2,136,,90,0,{},{ bonus bStr,1; },,,, 2622,Earring_,Ancient Earring,5,30000,0,200,,0,,1,10477567,2,136,,90,0,{},{ bonus bInt,1; },,,, @@ -987,8 +987,8 @@ 2626,Rosary_,Ancient Rosary,5,15000,0,200,,0,,1,10477567,2,136,,90,0,{},{ bonus bMdef,3; bonus bLuk,1; },,, 2627,Belt,Ancient Belt,5,20000,0,1200,,0,,1,10477567,2,136,,25,0,{},{},,,,, 2628,Novice_Armlet,Novice Armlet,5,400,0,200,,0,,1,8388609,2,136,,0,0,{},{ bonus bStr,1; bonus bInt,1; bonus bLuk,1; },, -2629,Megingjard,Megingjard,5,20,0,8000,,2,,0,10477567,2,136,,90,0,{},{ bonus bStr,40; bonus bMdef,7; },,, -2630,Brisingamen,Brisingamen,5,20,0,1500,,1,,0,10477567,2,136,,95,0,{},{ bonus bStr,3; bonus bAgi,3; bonus bVit,3; bonus bInt,3; bonus bMdef,5; } +2629,Megingjard,Megingjard,5,20,0,8000,,2,,0,10477567,2,136,,94,0,{},{ bonus bStr,40; bonus bMdef,7; },,, +2630,Brisingamen,Brisingamen,5,20,0,1500,,1,,0,10477567,2,136,,94,0,{},{ bonus bStr,6; bonus bAgi,6; bonus bVit,6; bonus bInt,6; bonus bLuk,10; bonus bMdef,5; } 2631,Celebration_Ring,Celebration Ring,5,20,0,10,,0,,0,10477567,2,136,,0,0,{},{ bonus bStr,2; bonus bAgi,2; bonus bVit,2; bonus bInt,2; bonus bDex,2; bonus bLuk,2; } 2634,Wedding_Ring_M,Wedding Ring,4,20,0,0,,,,0,10477567,1,136,,0,,{},{ skill 334,1; skill 336,1; } 2635,Wedding_Ring_F,Wedding Ring,4,20,0,0,,,,0,10477567,0,136,,0,,{},{ skill 335,1; skill 336,1; } @@ -1093,7 +1093,7 @@ 4091,Kobold_Card,Kobold Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bStr,1; bonus bCritical,4; } 4092,Skel_Worker_Card,Skel Worker Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddSize,1,15; bonus bBaseAtk,5; } 4093,Obeaune_Card,Obeaune Card,6,20,0,10,,,,,,,136,,,,{},{ skill 35,1; } -4094,Archer_Skeleton_Card,Archer Skeleton Card,6,20,0,10,,,,,,,2,,,,{},{} +4094,Archer_Skeleton_Card,Archer Skeleton Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bLongAtkRate,10; } 4095,Marse_Card,Marse Card,6,20,0,10,,,,,,,4,,,,{},{ bonus2 bSubEle,1,30; } 4096,Zenorc_Card,Zenorc Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddEff,Eff_Poison,400; bonus bBaseAtk,10; } 4097,Matyr_Card,Matyr Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bMaxHPrate,10; bonus bAgi,1; } diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt index d47ce2e3a..014f24a68 100644 --- a/db/skill_require_db.txt +++ b/db/skill_require_db.txt @@ -146,7 +146,7 @@ 229,0,0,10,0,0,0,99,none,0,7135,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AM_DEMONSTRATION#デモンストレ?ション# 230,0,0,15,0,0,0,99,none,0,7136,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AM_ACIDTERROR#アシッドテラ?# 231,0,0,1,0,0,0,99,none,0,501,1,502,1,503,1,504,1,505,1,522,1,526,1,608,1,607,1,657,1 //AM_POTIONPITCHER#ポ?ションピッチャ?# -232,0,0,20,0,0,0,99,none,0,7137,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AM_CANNIBALIZE#バイオプラント# +232,0,0,15,0,0,0,99,none,0,7137,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AM_CANNIBALIZE#バイオプラント# 233,0,0,10,0,0,0,99,none,0,7138,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AM_SPHEREMINE#スフィア?マイン# 234,0,0,30,0,0,0,99,none,0,7139,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AM_CP_WEAPON#ケミカルウェポンチャ?ジ# 235,0,0,25,0,0,0,99,none,0,7139,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AM_CP_SHIELD#ケミカルシ?ルドチャ?ジ# @@ -294,10 +294,10 @@ 407,0,0,50,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ASC_CDP#デッドリ?ポイズン作成# 475,0,0,40,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ST_PRESERVE## -476,0,0,12:14:16:18:20,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ST_FULLSTRIP## +476,0,0,22:24:26:28:30,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ST_FULLSTRIP## 477,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WS_WEAPONREFINE## 478,0,0,30,0,0,0,99,none,0,545,1,545,1,545,1,545,1,545,1,546,1,546,1,546,1,546,1,547,1 //CR_SLIMPITCHER## -479,0,0,30,0,0,0,99,none,0,7139,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CR_FULLPROTECTION## +479,0,0,40,0,0,0,99,none,0,7139,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CR_FULLPROTECTION## 10010,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_BATTLEORDER## 10011,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_REGENERATION## diff --git a/src/map/guild.c b/src/map/guild.c index f4ab77dfd..8d84705fd 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -952,6 +952,30 @@ int guild_payexp(struct map_session_data *sd,int exp) return exp2; } +// Celest +int guild_getexp(struct map_session_data *sd,int exp) +{ + struct guild *g; + struct guild_expcache *c; + + nullpo_retr(0, sd); + + if(sd->status.guild_id==0 || (g=guild_search(sd->status.guild_id))==NULL ) + return 0; + + if( (c=numdb_search(guild_expcache_db,sd->status.char_id))==NULL ){ + c=(struct guild_expcache *)aCalloc(1,sizeof(struct guild_expcache)); + c->guild_id=sd->status.guild_id; + c->account_id=sd->status.account_id; + c->char_id=sd->status.char_id; + c->exp=exp; + numdb_insert(guild_expcache_db,c->char_id,c); + }else{ + c->exp+=exp; + } + return exp; +} + // スキルポイント割り振り int guild_skillup(struct map_session_data *sd,int skill_num,int flag) { diff --git a/src/map/guild.h b/src/map/guild.h index 528605f7f..eefdcb04e 100644 --- a/src/map/guild.h +++ b/src/map/guild.h @@ -29,6 +29,7 @@ struct map_session_data *guild_getavailablesd(struct guild *g); int guild_getindex(struct guild *g,int account_id,int char_id); int guild_getposition(struct map_session_data *sd,struct guild *g); int guild_payexp(struct map_session_data *sd,int exp); +int guild_getexp(struct map_session_data *sd,int exp); // [Celest] int guild_create(struct map_session_data *sd,char *name); int guild_created(int account_id,int guild_id); diff --git a/src/map/map.h b/src/map/map.h index 6684250e5..0c456c51a 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -587,7 +587,8 @@ enum { SP_HP_DRAIN_VALUE,SP_SP_DRAIN_VALUE, // 1079-1080 SP_RESTART_FULL_RECORVER=2000,SP_NO_CASTCANCEL,SP_NO_SIZEFIX,SP_NO_MAGIC_DAMAGE,SP_NO_WEAPON_DAMAGE,SP_NO_GEMSTONE, // 2000-2005 - SP_NO_CASTCANCEL2,SP_INFINITE_ENDURE,SP_UNBREAKABLE_WEAPON,SP_UNBREAKABLE_ARMOR // 2006-2009 + SP_NO_CASTCANCEL2,SP_INFINITE_ENDURE,SP_UNBREAKABLE_WEAPON,SP_UNBREAKABLE_ARMOR, SP_UNBREAKABLE_HELM, // 2006-2010 + SP_LONG_ATK_RATE // 2011 - celest }; enum { diff --git a/src/map/pc.c b/src/map/pc.c index 3988b950d..b6e4cbbf0 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2587,6 +2587,10 @@ int pc_bonus(struct map_session_data *sd,int type,int val) sd->classchange=val; } break; + case SP_LONG_ATK_RATE: + if(sd->status.weapon == 11 && sd->state.lr_flag != 2) + sd->atk_rate += val; + break; default: if(battle_config.error_log) printf("pc_bonus: unknown type %d %d !\n",type,val); diff --git a/src/map/script.c b/src/map/script.c index 7e8fe020a..750ef4d0c 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -291,6 +291,7 @@ 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_checkoption1(struct script_state *st); // [celest] int buildin_checkoption2(struct script_state *st); // [celest] +int buildin_guildgetexp(struct script_state *st); // [celest] void push_val(struct script_stack *stack,int type,int val); int run_func(struct script_state *st); @@ -501,7 +502,8 @@ struct { {buildin_npcstop,"npcstop",""}, // [Valaris] {buildin_getmapxy,"getmapxy","siii*"}, //by Lorky [Lupus] {buildin_checkoption1,"checkoption1","i"}, - {buildin_checkoption2,"checkoption2","i"}, + {buildin_checkoption2,"checkoption2","i"}, + {buildin_guildgetexp,"guildgetexp","i"}, {NULL,NULL,NULL}, }; int buildin_message(struct script_state *st); // [MouseJstr] @@ -3680,6 +3682,24 @@ int buildin_getexp(struct script_state *st) return 0; } +/*========================================== + * Gain guild exp [Celest] + *------------------------------------------ + */ +int buildin_guildgetexp(struct script_state *st) +{ + struct map_session_data *sd = script_rid2sd(st); + int exp; + + exp = conv_num(st,& (st->stack->stack_data[st->start+2])); + if(exp < 0) + return 0; + if(sd && sd->status.guild_id > 0) + guild_getexp (sd, exp); + + return 0; +} + /*========================================== * モンスター発生 *------------------------------------------ diff --git a/src/map/skill.c b/src/map/skill.c index ba8991e52..77b5b7516 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -6843,6 +6843,7 @@ int skill_check_condition(struct map_session_data *sd,int type) { int i,hp,sp,hp_rate,sp_rate,zeny,weapon,state,spiritball,skill,lv,mhp; int index[10],itemid[10],amount[10]; + int arrow_flag = 0; nullpo_retr(0, sd); @@ -7059,6 +7060,20 @@ int skill_check_condition(struct map_session_data *sd,int type) } } break; + // skills require arrows as of 12/07 [celest] + case AC_DOUBLE: + case AC_SHOWER: + case AC_CHARGEARROW: + case BA_MUSICALSTRIKE: + case DC_THROWARROW: + case SN_SHARPSHOOTING: + case CG_ARROWVULCAN: + if(sd->equip_index[10] <= 0) { + clif_arrow_fail(sd,0); + return 0; + } + arrow_flag = 1; + break; } if(!(type&2)){ @@ -7196,6 +7211,8 @@ int skill_check_condition(struct map_session_data *sd,int type) if(index[i] >= 0) pc_delitem(sd,index[i],amount[i],0); // アイテム消費 } + if (arrow_flag && battle_config.arrow_decrement) + pc_delitem(sd,sd->equip_index[10],1,0); } if(type&2) -- cgit v1.2.3-60-g2f50