Explorar o código

- 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://svn.code.sf.net/p/rathena/svn/branches/stable@485 54d463be-8e91-2dee-dedb-b68131a5f0ec

celest %!s(int64=20) %!d(string=hai) anos
pai
achega
6b295f3eb7
Modificáronse 11 ficheiros con 99 adicións e 14 borrados
  1. 7 0
      Changelog.txt
  2. 5 0
      db/Changelog.txt
  3. 6 0
      db/const.txt
  4. 9 9
      db/item_db.txt
  5. 3 3
      db/skill_require_db.txt
  6. 24 0
      src/map/guild.c
  7. 1 0
      src/map/guild.h
  8. 2 1
      src/map/map.h
  9. 4 0
      src/map/pc.c
  10. 21 1
      src/map/script.c
  11. 17 0
      src/map/skill.c

+ 7 - 0
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]

+ 5 - 0
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

+ 6 - 0
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

+ 9 - 9
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; }

+ 3 - 3
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##

+ 24 - 0
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)
 {

+ 1 - 0
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);

+ 2 - 1
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 {

+ 4 - 0
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);

+ 21 - 1
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;
+}
+
 /*==========================================
  * ƒ‚ƒ“ƒXƒ^�[”­�¶
  *------------------------------------------

+ 17 - 0
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);		// ƒAƒCƒeƒ€�Á”ï
 		}
+		if (arrow_flag && battle_config.arrow_decrement)
+			pc_delitem(sd,sd->equip_index[10],1,0);
 	}
 
 	if(type&2)