Jump to content

Release: Unimplemented Official Skills


grenat50

Recommended Posts


  • Group:  Members
  • Topic Count:  15
  • Topics Per Day:  0.01
  • Content Count:  69
  • Reputation:   79
  • Joined:  02/20/20
  • Last Seen:  

Unimplemented Official Skills


After the success of our previous release Battleground Extended , Mystic Project has decided to release another work for free in the community of rAthena - The Gravity's Unimplemented Official Skills. We've long heard about them since the beginning. I've seen posts of people wondering if there was any releases of them. It took a while but here it is. We did some researches about what was intended by Gravity. I think we came close to the initial project with a few modifications.

 

What are the Unimplemented Official Skills ?

Unimplemented Official Skills are skills designed by Gravity long ago that have never been released. They were forgotten / dropped by Gravity.

On iRO official wiki, you can see some informations about them. For example: Fire Ivy - iRO Wiki Classic

 

Forgotten Skills List and Effect:

  • wz_fireivy.png.3cdff575f46bd81080b380da4b8e7f53.png Fire Ivy: Wizard has plenty of fire skills, as it was supposed to be an immobile skill that causes damage, we've renamed it to Wind Ivy and made it Wind. It can stop the target and does damage each second. Can be stackable up to 5.
           Class: Wizard
  • lk_fury.png.61780d5e3abf0a22b03ab926b5e0d738.png Fury: The LK enters a Fury Phase. Each attack received increases LK's ATK by 1 each 500 damage (up to 5). Some damage are being absorbed and reduced depending of current maxhp.
           Class: Lord Knight
  • st_stealbackpack.png.dbe477e63a5b539d134e0f17ae82b0d6.png Steal Backpack: Steal 1 stuff / item of Players directly in the inventory. Item is sent to the storage and the Stalker will have it as a rental for 5 minutes. If used on monsters, does a AOE Steal/Steal Coin
           Class: Stalker
  • ws_systemcreate.png.e0113a1d498fadb683bc2b3c8519db6b.png System Creation: Auto-Attack system of Whitesmith was designed to summon small devices to attack targets. There are ATK/MATK devices depending on level. Iron is required to make the device.
           Class: Whitesmith
  • cr_synthesispotion.png.84796806dabf6f72ee3130709f4ad4b1.png Synthesis Potion: Creates a rental potion that lasts 5 min for the whole party around the Creator if items requirements met. It costs 3 misc items to create a potion. Amount of players in the party increases the amount of items required. Those items are healing potions (heal over 10 seconds), ATK/MATK/Flee/Hit potions.
           Class: Creator
  • bd_ragnarok.png.cddfa8f7f8f51f2dde1258c86c9b6a3a.png Ragnarok: Ensemble Skill done by a bard and a dancer together. It causes damage in the area, as well as abnormal statuses. Allies receive buffs. Buffs and abnormal statuses are random each second. (similar to gospel)
           Class: Bard/Dancer
  • asc_hallucination.png.8d934dd6704340023a9d3f352e210aca.png Hallucination Walk: Summons a clone of self and cloak the SinX. If used while being cloaked: uncloaked the SinX and causes Hallucination in an area.
           Class: Assassin Cross
  • am_biotechnology.png.5d6b0751e4b1d091384400eb4bccd60c.png Biotechnology: Passive skill. Increases chance to create an embryo and MaxHP of Homunculus by 2% per level.
           Class: Alchemist
  • am_drillmaster.png.e2435ae6c3847f63c68839e3ab3c2f63.png Drill Master: Passive skill. Increases damage of homunculus by 2% per level.
           Class: Alchemist
  • am_healhomun.png.d2066292a7d30838e81697674a36bc6d.png Heal Homunculus: Same as Potion Pitcher lv 4 but targets directly the homunculus by using it without having to click on the homunculus.
           Class: Alchemist
  • am_flamecontrol.png.ce9c0a3610793b214865ef72d998e617.png Flame Control: Alchemist inflicts damage linked to the homunculus based on homunculus's ATK and MATK. Chances to inflict a common status depending on homunculus type.
           Class: Alchemist
  • am_twilight4.png.ca98b7a086f9ed1189a9a5a6287eb40b.png Twilight Alchemy IV: Creates 200 blue potions if all requirements are met.

 

Bonus - Extra Custom Skills:

  • wz_earthwall-1.png.34ab9413da4daa41e8f6ccfdd29b4481.png Earth Wall: Same as Ice Wall but it is indestructible and one cell only. 5 instances maximum.
           Class: Wizard
  • wz_earthquake.png.5b28de66cc3b668e7a6bf814476bcd24.png Earthquake: Adapted version of Earthquake for Wizard. Part of ATK and MATK are defining damage.
           Class: Wizard

 

Installation and Compatibility:

I did put some instructions in the read me file regarding the installation.

The diff is compatible with the latest rathena but it is easy to adapt to any version really.

 

Any Questions ?

You can contact me on Discord: Grenat#5220 for support regarding the installation.

 


 

  • Upvote 2
  • Love 2
  • MVP 1
  • Like 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  61
  • Topics Per Day:  0.02
  • Content Count:  911
  • Reputation:   166
  • Joined:  11/27/14
  • Last Seen:  

I would love to see this too


Auto-Attack System : Summon 3 different clone each level lvl 1 Sniper , lvl 2 Whitesmith and lvl 3 is High priest
Job: Priest

Create Nugget : Jump to enemy inside cell 1x1
Job: Stalker

Fire Ivy: Swap enemy with your location
Job: High Wizard


 

  • Love 1
  • Like 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  76
  • Topics Per Day:  0.02
  • Content Count:  461
  • Reputation:   61
  • Joined:  08/28/12
  • Last Seen:  

Awesome work. Thanks !!

Link to comment
Share on other sites

  • 2 weeks later...

  • Group:  Members
  • Topic Count:  43
  • Topics Per Day:  0.01
  • Content Count:  173
  • Reputation:   9
  • Joined:  11/14/12
  • Last Seen:  

Hello! Is there a version of this that uses txt db files? Thanks.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  123
  • Topics Per Day:  0.03
  • Content Count:  640
  • Reputation:   82
  • Joined:  04/07/14
  • Last Seen:  

It would be awesome for txt version of skill db.

Link to comment
Share on other sites

  • 1 year later...

  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  14
  • Reputation:   4
  • Joined:  02/20/23
  • Last Seen:  

lot of errors on apply diff with git apply Unimplemented_Official_Skills.diff ? 

Link to comment
Share on other sites

  • 3 months later...

  • Group:  Members
  • Topic Count:  17
  • Topics Per Day:  0.00
  • Content Count:  81
  • Reputation:   12
  • Joined:  06/22/13
  • Last Seen:  

Good day! Does this still work? I've encountered different structure on map.cpp. It was supposed to be like this but

 

diff --git a/src/map/map.cpp b/src/map/map.cpp
index 735bfc678..10537d75e 100644
--- a/src/map/map.cpp
+++ b/src/map/map.cpp
@@ -2088,6 +2088,9 @@ int map_quit(struct map_session_data *sd) {
 		status_change_end(&sd->bl, SC_AUTOTRADE, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_BERSERK, INVALID_TIMER);
+#ifdef FORGOTTEN_SKILLS
+		status_change_end(&sd->bl, SC_FURY2, INVALID_TIMER);
+#endif
 		status_change_end(&sd->bl, SC__BLOODYLUST, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_TRICKDEAD, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_LEADERSHIP, INVALID_TIMER);

 

it's different now.

 

/*==========================================
 * Standard call when a player connection is closed.
 *------------------------------------------*/
int map_quit(map_session_data *sd) {
	int i;

	if (sd->state.keepshop == false) { // Close vending/buyingstore
		if (sd->state.vending)
			vending_closevending(sd);
		else if (sd->state.buyingstore)
			buyingstore_close(sd);
	}

	if(!sd->state.active) { //Removing a player that is not active.
		struct auth_node *node = chrif_search(sd->status.account_id);
		if (node && node->char_id == sd->status.char_id &&
			node->state != ST_LOGOUT)
			//Except when logging out, clear the auth-connect data immediately.
			chrif_auth_delete(node->account_id, node->char_id, node->state);
		//Non-active players should not have loaded any data yet (or it was cleared already) so no additional cleanups are needed.
		return 0;
	}

	if (sd->expiration_tid != INVALID_TIMER)
		delete_timer(sd->expiration_tid, pc_expiration_timer);

	if (sd->npc_timer_id != INVALID_TIMER) //Cancel the event timer.
		npc_timerevent_quit(sd);

	if (sd->autotrade_tid != INVALID_TIMER)
		delete_timer(sd->autotrade_tid, pc_autotrade_timer);

	if (sd->npc_id)
		npc_event_dequeue(sd);

	if (sd->bg_id)
		bg_team_leave(sd, true, true);

	if (sd->bg_queue_id > 0)
		bg_queue_leave(sd, false);

	if( sd->status.clan_id )
		clan_member_left(sd);

	pc_itemcd_do(sd,false);

	npc_script_event(sd, NPCE_LOGOUT);

	//Unit_free handles clearing the player related data,
	//map_quit handles extra specific data which is related to quitting normally
	//(changing map-servers invokes unit_free but bypasses map_quit)
	if( sd->sc.count ) {
		for (const auto &it : status_db) {
			std::bitset<SCF_MAX> &flag = it.second->flag;

			//No need to save infinite status
			if (flag[SCF_NOSAVEINFINITE] && sd->sc.getSCE(it.first) && sd->sc.getSCE(it.first)->val4 > 0) {
				status_change_end(&sd->bl, static_cast<sc_type>(it.first));
				continue;
			}

			//Status that are not saved
			if (flag[SCF_NOSAVE]) {
				status_change_end(&sd->bl, static_cast<sc_type>(it.first));
				continue;
			}
			//Removes status by config
			if (battle_config.debuff_on_logout&1 && flag[SCF_DEBUFF] || //Removes debuffs
				(battle_config.debuff_on_logout&2 && !(flag[SCF_DEBUFF]))) //Removes buffs
			{
				status_change_end(&sd->bl, static_cast<sc_type>(it.first));
				continue;
			}
		}
	}

	for (i = 0; i < EQI_MAX; i++) {
		if (sd->equip_index[i] >= 0)
			if (pc_isequip(sd,sd->equip_index[i]))
				pc_unequipitem(sd,sd->equip_index[i],2);
	}

	// Return loot to owner
	if( sd->pd ) pet_lootitem_drop(sd->pd, sd);

	if (sd->ed) // Remove effects here rather than unit_remove_map_pc so we don't clear on Teleport/map change.
		elemental_clean_effect(sd->ed);

	if (sd->state.permanent_speed == 1) sd->state.permanent_speed = 0; // Remove lock so speed is set back to normal at login.

	struct map_data *mapdata = map_getmapdata(sd->bl.m);

	if( mapdata->instance_id > 0 )
		instance_delusers(mapdata->instance_id);

	unit_remove_map_pc(sd,CLR_RESPAWN);

	if (sd->state.vending)
		idb_remove(vending_getdb(), sd->status.char_id);

	if (sd->state.buyingstore)
		idb_remove(buyingstore_getdb(), sd->status.char_id);

	pc_damage_log_clear(sd,0);
	party_booking_delete(sd); // Party Booking [Spiria]
	pc_makesavestatus(sd);
	pc_clean_skilltree(sd);
	pc_crimson_marker_clear(sd);
	pc_macro_detector_disconnect(*sd);
	chrif_save(sd, CSAVE_QUIT|CSAVE_INVENTORY|CSAVE_CART);
	unit_free_pc(sd);
	return 0;
}

 

Link to comment
Share on other sites

  • 2 months later...

  • Group:  Members
  • Topic Count:  15
  • Topics Per Day:  0.01
  • Content Count:  148
  • Reputation:   21
  • Joined:  11/12/18
  • Last Seen:  

On 6/26/2023 at 9:07 AM, Louis T Steinhil said:

Good day! Does this still work? I've encountered different structure on map.cpp. It was supposed to be like this but

 

diff --git a/src/map/map.cpp b/src/map/map.cpp
index 735bfc678..10537d75e 100644
--- a/src/map/map.cpp
+++ b/src/map/map.cpp
@@ -2088,6 +2088,9 @@ int map_quit(struct map_session_data *sd) {
 		status_change_end(&sd->bl, SC_AUTOTRADE, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_BERSERK, INVALID_TIMER);
+#ifdef FORGOTTEN_SKILLS
+		status_change_end(&sd->bl, SC_FURY2, INVALID_TIMER);
+#endif
 		status_change_end(&sd->bl, SC__BLOODYLUST, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_TRICKDEAD, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_LEADERSHIP, INVALID_TIMER);

 

it's different now.

 

/*==========================================
 * Standard call when a player connection is closed.
 *------------------------------------------*/
int map_quit(map_session_data *sd) {
	int i;

	if (sd->state.keepshop == false) { // Close vending/buyingstore
		if (sd->state.vending)
			vending_closevending(sd);
		else if (sd->state.buyingstore)
			buyingstore_close(sd);
	}

	if(!sd->state.active) { //Removing a player that is not active.
		struct auth_node *node = chrif_search(sd->status.account_id);
		if (node && node->char_id == sd->status.char_id &&
			node->state != ST_LOGOUT)
			//Except when logging out, clear the auth-connect data immediately.
			chrif_auth_delete(node->account_id, node->char_id, node->state);
		//Non-active players should not have loaded any data yet (or it was cleared already) so no additional cleanups are needed.
		return 0;
	}

	if (sd->expiration_tid != INVALID_TIMER)
		delete_timer(sd->expiration_tid, pc_expiration_timer);

	if (sd->npc_timer_id != INVALID_TIMER) //Cancel the event timer.
		npc_timerevent_quit(sd);

	if (sd->autotrade_tid != INVALID_TIMER)
		delete_timer(sd->autotrade_tid, pc_autotrade_timer);

	if (sd->npc_id)
		npc_event_dequeue(sd);

	if (sd->bg_id)
		bg_team_leave(sd, true, true);

	if (sd->bg_queue_id > 0)
		bg_queue_leave(sd, false);

	if( sd->status.clan_id )
		clan_member_left(sd);

	pc_itemcd_do(sd,false);

	npc_script_event(sd, NPCE_LOGOUT);

	//Unit_free handles clearing the player related data,
	//map_quit handles extra specific data which is related to quitting normally
	//(changing map-servers invokes unit_free but bypasses map_quit)
	if( sd->sc.count ) {
		for (const auto &it : status_db) {
			std::bitset<SCF_MAX> &flag = it.second->flag;

			//No need to save infinite status
			if (flag[SCF_NOSAVEINFINITE] && sd->sc.getSCE(it.first) && sd->sc.getSCE(it.first)->val4 > 0) {
				status_change_end(&sd->bl, static_cast<sc_type>(it.first));
				continue;
			}

			//Status that are not saved
			if (flag[SCF_NOSAVE]) {
				status_change_end(&sd->bl, static_cast<sc_type>(it.first));
				continue;
			}
			//Removes status by config
			if (battle_config.debuff_on_logout&1 && flag[SCF_DEBUFF] || //Removes debuffs
				(battle_config.debuff_on_logout&2 && !(flag[SCF_DEBUFF]))) //Removes buffs
			{
				status_change_end(&sd->bl, static_cast<sc_type>(it.first));
				continue;
			}
		}
	}

	for (i = 0; i < EQI_MAX; i++) {
		if (sd->equip_index[i] >= 0)
			if (pc_isequip(sd,sd->equip_index[i]))
				pc_unequipitem(sd,sd->equip_index[i],2);
	}

	// Return loot to owner
	if( sd->pd ) pet_lootitem_drop(sd->pd, sd);

	if (sd->ed) // Remove effects here rather than unit_remove_map_pc so we don't clear on Teleport/map change.
		elemental_clean_effect(sd->ed);

	if (sd->state.permanent_speed == 1) sd->state.permanent_speed = 0; // Remove lock so speed is set back to normal at login.

	struct map_data *mapdata = map_getmapdata(sd->bl.m);

	if( mapdata->instance_id > 0 )
		instance_delusers(mapdata->instance_id);

	unit_remove_map_pc(sd,CLR_RESPAWN);

	if (sd->state.vending)
		idb_remove(vending_getdb(), sd->status.char_id);

	if (sd->state.buyingstore)
		idb_remove(buyingstore_getdb(), sd->status.char_id);

	pc_damage_log_clear(sd,0);
	party_booking_delete(sd); // Party Booking [Spiria]
	pc_makesavestatus(sd);
	pc_clean_skilltree(sd);
	pc_crimson_marker_clear(sd);
	pc_macro_detector_disconnect(*sd);
	chrif_save(sd, CSAVE_QUIT|CSAVE_INVENTORY|CSAVE_CART);
	unit_free_pc(sd);
	return 0;
}

 

yes cause latest rev is now using status.yml

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...