Example #1
0
int elemental_clean_effect(struct elemental_data *ed)
{
	struct map_session_data *sd;

	nullpo_ret(ed);

	// Elemental side
	status_change_end(&ed->bl,SC_TROPIC,-1);
	status_change_end(&ed->bl,SC_HEATER,-1);
	status_change_end(&ed->bl,SC_AQUAPLAY,-1);
	status_change_end(&ed->bl,SC_COOLER,-1);
	status_change_end(&ed->bl,SC_CHILLY_AIR,-1);
	status_change_end(&ed->bl,SC_PYROTECHNIC,-1);
	status_change_end(&ed->bl,SC_FIRE_CLOAK,-1);
	status_change_end(&ed->bl,SC_WATER_DROP,-1);
	status_change_end(&ed->bl,SC_WATER_SCREEN,-1);
	status_change_end(&ed->bl,SC_GUST,-1);
	status_change_end(&ed->bl,SC_WIND_STEP,-1);
	status_change_end(&ed->bl,SC_BLAST,-1);
	status_change_end(&ed->bl,SC_WIND_CURTAIN,-1);
	status_change_end(&ed->bl,SC_WILD_STORM,-1);
	status_change_end(&ed->bl,SC_PETROLOGY,-1);
	status_change_end(&ed->bl,SC_SOLID_SKIN,-1);
	status_change_end(&ed->bl,SC_CURSED_SOIL,-1);
	status_change_end(&ed->bl,SC_STONE_SHIELD,-1);
	status_change_end(&ed->bl,SC_UPHEAVAL,-1);
	status_change_end(&ed->bl,SC_TIDAL_WEAPON,-1);

	skill_clear_unitgroup(&ed->bl);

	if( (sd = ed->master) == NULL )
		return 0;

	// Master side
	status_change_end(&sd->bl,SC_TROPIC_OPTION,-1);
	status_change_end(&sd->bl,SC_HEATER_OPTION,-1);
	status_change_end(&sd->bl,SC_AQUAPLAY_OPTION,-1);
	status_change_end(&sd->bl,SC_COOLER_OPTION,-1);
	status_change_end(&sd->bl,SC_CHILLY_AIR_OPTION,-1);
	status_change_end(&sd->bl,SC_PYROTECHNIC_OPTION,-1);
	status_change_end(&sd->bl,SC_FIRE_CLOAK_OPTION,-1);
	status_change_end(&sd->bl,SC_WATER_DROP_OPTION,-1);
	status_change_end(&sd->bl,SC_WATER_SCREEN_OPTION,-1);
	status_change_end(&sd->bl,SC_GUST_OPTION,-1);
	status_change_end(&sd->bl,SC_WIND_STEP_OPTION,-1);
	status_change_end(&sd->bl,SC_BLAST_OPTION,-1);
	status_change_end(&sd->bl,SC_WATER_DROP_OPTION,-1);
	status_change_end(&sd->bl,SC_WIND_CURTAIN_OPTION,-1);
	status_change_end(&sd->bl,SC_WILD_STORM_OPTION,-1);
	status_change_end(&sd->bl,SC_ZEPHYR,-1);
	status_change_end(&sd->bl,SC_WIND_STEP_OPTION,-1);
	status_change_end(&sd->bl,SC_PETROLOGY_OPTION,-1);
	status_change_end(&sd->bl,SC_SOLID_SKIN_OPTION,-1);
	status_change_end(&sd->bl,SC_CURSED_SOIL_OPTION,-1);
	status_change_end(&sd->bl,SC_STONE_SHIELD_OPTION,-1);
	status_change_end(&sd->bl,SC_UPHEAVAL_OPTION,-1);
	status_change_end(&sd->bl,SC_TIDAL_WEAPON_OPTION,-1);

	return 1;
}
Example #2
0
int elemental_clean_single_effect (struct elemental_data *ed, int skill_num)
{
	struct block_list *bl;
	sc_type type = status_skill2sc (skill_num);
	nullpo_ret (ed);
	bl = battle_get_master (&ed->bl);

	if (type) {
		switch (type) {
				// Just remove status change.
			case SC_PYROTECHNIC_OPTION:
			case SC_HEATER_OPTION:
			case SC_TROPIC_OPTION:
			case SC_FIRE_CLOAK_OPTION:
			case SC_AQUAPLAY_OPTION:
			case SC_WATER_SCREEN_OPTION:
			case SC_COOLER_OPTION:
			case SC_CHILLY_AIR_OPTION:
			case SC_GUST_OPTION:
			case SC_WIND_STEP_OPTION:
			case SC_BLAST_OPTION:
			case SC_WATER_DROP_OPTION:
			case SC_WIND_CURTAIN_OPTION:
			case SC_WILD_STORM_OPTION:
			case SC_PETROLOGY_OPTION:
			case SC_SOLID_SKIN_OPTION:
			case SC_CURSED_SOIL_OPTION:
			case SC_STONE_SHIELD_OPTION:
			case SC_UPHEAVAL_OPTION:
			case SC_CIRCLE_OF_FIRE_OPTION:
			case SC_TIDAL_WEAPON_OPTION:
				if (bl) status_change_end (bl, type, INVALID_TIMER);	// Master

				status_change_end (&ed->bl, type - 1, INVALID_TIMER);	// Elemental Spirit
				break;

			case SC_ZEPHYR:
				if (bl) status_change_end (bl, type, INVALID_TIMER);

				break;

			default:
				ShowWarning ("Invalid SC=%d in elemental_clean_single_effect\n", type);
				break;
		}
	}

	if (skill_get_unit_id (skill_num, 0))
		skill_clear_unitgroup (&ed->bl);

	return 1;
}
Example #3
0
File: duel.c Project: 544a/rathena
/*
* Moves sd to duel
*/
static void duel_set(const unsigned int did, struct map_session_data* sd) {
	sd->state.changemap = 1;
	sd->state.warping = 1;

	// As you move to a different plane, ground effects need to be cleared
	skill_clear_unitgroup(&sd->bl);
	skill_unit_move(&sd->bl, gettick(), 2);
	skill_cleartimerskill(&sd->bl);

	sd->duel_group = did;

	skill_unit_move(&sd->bl, gettick(), 3);

	sd->state.changemap = 0;
	sd->state.warping = 0;
}
Example #4
0
/*==========================================
 * PCのquit処理 map.c内分
 *
 * quit処理の主体が違うような気もしてきた
 *------------------------------------------
 */
int map_quit(struct map_session_data *sd)
{
	if(sd->chatID)	// チャットから出る
		chat_leavechat(sd);
		
	if(sd->trade_partner)	// 取引を中断する
		trade_tradecancel(sd);

	if(sd->party_invite>0)	// パーティ勧誘を拒否する
		party_reply_invite(sd,sd->party_invite_account,0);

	if(sd->guild_invite>0)	// ギルド勧誘を拒否する
		guild_reply_invite(sd,sd->guild_invite,0);
	if(sd->guild_alliance>0)	// ギルド同盟勧誘を拒否する
		guild_reply_reqalliance(sd,sd->guild_alliance_account,0);

	party_send_logout(sd);	// パーティのログアウトメッセージ送信

	guild_send_memberinfoshort(sd,0);	// ギルドのログアウトメッセージ送信

	pc_cleareventtimer(sd);	// イベントタイマを破棄する

	storage_storage_quit(sd);	// 倉庫を開いてるなら保存する

	skill_castcancel(&sd->bl,0);	// 詠唱を中断する
	skill_status_change_clear(&sd->bl);	// ステータス異常を解除する
	skill_clear_unitgroup(&sd->bl);	// スキルユニットグループの削除
	skill_cleartimerskill(&sd->bl);
	pc_stop_walking(sd,0);
	pc_stopattack(sd);
	pc_delinvincibletimer(sd);
	pc_delspiritball(sd,sd->spiritball,1);
	skill_gangsterparadise(sd,0);

	pc_calcstatus(sd,4);

	clif_clearchar_area(&sd->bl,2);

	if(sd->status.pet_id && sd->pd) {
		pet_remove_map(sd);
		if(sd->pet.intimate <= 0) {
			intif_delete_petdata(sd->status.pet_id);
			sd->status.pet_id = 0;
			sd->pd = NULL;
			sd->petDB = NULL;
		}
		else
			intif_save_petdata(sd->status.account_id,&sd->pet);
	}

	if(pc_isdead(sd))
		pc_setrestartvalue(sd,2);
	pc_makesavestatus(sd);
	chrif_save(sd);
	storage_storage_save(sd);

	map_delblock(&sd->bl);

	numdb_erase(id_db,sd->bl.id);
	strdb_erase(nick_db,sd->status.name);

	return 0;
}