Explorar o código

- Spirit of Wizard will now consume an item 7321 each time it blocks reflected magic.
- Added script command jobname, retrieves a given's class name as per the appropiate msg_athena.txt entry (this command should had been added years ago)


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8320 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex %!s(int64=19) %!d(string=hai) anos
pai
achega
1079f53d4c
Modificáronse 5 ficheiros con 34 adicións e 3 borrados
  1. 5 0
      Changelog-Trunk.txt
  2. 10 0
      doc/script_commands.txt
  3. 1 1
      src/char/inter.c
  4. 13 0
      src/map/script.c
  5. 5 2
      src/map/skill.c

+ 5 - 0
Changelog-Trunk.txt

@@ -4,6 +4,11 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/08/16
+	* Spirit of Wizard will now consume an item 7321 each time it blocks
+	  reflected magic. [Skotlex]
+	* Added script command jobname, retrieves a given's class name as per the
+	  appropiate msg_athena.txt entry (this command should had been added years
+	  ago) [Skotlex]
 	* Fixed null-pointer crash on Evolving a homunculus. [Skotlex]
 	* @produce now can make any kind of equipment [Skotlex]
 	* Made HLIF_AVOID and HAMI_DEFENCE cause the status change on both caster

+ 10 - 0
doc/script_commands.txt

@@ -1257,6 +1257,16 @@ changing jobs, which can be checked for later in scripts.
 
 ---------------------------------------
 
+*jobname <job number>
+
+This command retrieves the name of the given job using the msg_athena entries 550->650.
+
+		mes "[Kid]";
+		mes "I never thought I'd met a "+jobname(Class)+" here of all places.";
+		close;
+
+---------------------------------------
+
 *input <variable>;
 
 This command will make an input box pop up on the client connected to the 

+ 1 - 1
src/char/inter.c

@@ -396,7 +396,7 @@ int mapif_disconnectplayer(int fd, int account_id, int char_id, int reason)
 	if (fd < 0)
 		return -1;
 	
-        WFIFOHEAD(fd, 7);
+	WFIFOHEAD(fd, 7);
 	WFIFOW(fd,0) = 0x2b1f;
 	WFIFOL(fd,2) = account_id;
 	WFIFOB(fd,6) = reason;

+ 13 - 0
src/map/script.c

@@ -3267,6 +3267,7 @@ int buildin_heal(struct script_state *st);
 int buildin_itemheal(struct script_state *st);
 int buildin_percentheal(struct script_state *st);
 int buildin_jobchange(struct script_state *st);
+int buildin_jobname(struct script_state *st);
 int buildin_input(struct script_state *st);
 int buildin_setlook(struct script_state *st);
 int buildin_set(struct script_state *st);
@@ -3583,6 +3584,7 @@ struct script_function buildin_func[] = {
 	{buildin_return,"return","*"},
 	{buildin_getarg,"getarg","i"},
 	{buildin_jobchange,"jobchange","i*"},
+	{buildin_jobname,"jobname","i"},
 	{buildin_input,"input","*"},
 	{buildin_warp,"warp","sii"},
 	{buildin_areawarp,"areawarp","siiiisii"},
@@ -4566,6 +4568,17 @@ int buildin_jobchange(struct script_state *st)
 	return 0;
 }
 
+/*==========================================
+ *
+ *------------------------------------------
+ */
+int buildin_jobname(struct script_state *st)
+{
+	int class_=conv_num(st,& (st->stack->stack_data[st->start+2]));
+	push_str(st->stack,C_CONSTSTR,job_name(class_));
+	return 0;
+}
+
 /*==========================================
  *
  *------------------------------------------

+ 5 - 2
src/map/skill.c

@@ -1877,8 +1877,11 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
 			tsd = (bl->type == BL_PC)?(TBL_PC*)bl:NULL;
 			if (sc && !sc->count)
 				sc = NULL; //Don't need it.
-			if (sc && sc->data[SC_SPIRIT].timer != -1 && sc->data[SC_SPIRIT].val2 == SL_WIZARD)
-			{	//Spirit of Wizard blocks bounced back spells.
+			//Spirit of Wizard blocks bounced back spells.
+			if (sc && sc->data[SC_SPIRIT].timer != -1 && sc->data[SC_SPIRIT].val2 == SL_WIZARD
+				&& !(tsd && (type = pc_search_inventory (tsd, 7321)) < 0))
+			{
+				if (tsd) pc_delitem(tsd, type, 1, 0);
 				dmg.damage = dmg.damage2 = 0;
 				dmg.dmg_lv = ATK_FLEE;
 			}