/// <summary> /// Callback for executing an action (attack/sit/stand) to a target (ID) /// </summary> /// <param name="character"></param> /// <param name="action"></param> /// <param name="id"></param> private static void Callback_ActionRequest(Character character, byte action, int id) { // TODO: check for dead player // TODO: check for trickdead, autocounter or bladestop (no action available) character.StopWalking(0x1); character.StopAttack(); // For disguise if (id < 0 && -id == character.AccountID) { id = (int)character.AccountID; } switch (action) { case 0x0: // Attack once case 0x7: // Attack continue if (character.CantAct() == false || (character.StatusChange.Option & EStatusOption.Hide) > 0) { return; } EStatusOption badOptions = (EStatusOption.Wedding | EStatusOption.Xmas | EStatusOption.Summer); if ((character.StatusChange.Option & badOptions) > 0) { return; } // TODO: basilica // TODO: freecast check character.ResetInvisibleTimer(); character.Attack(id, (action != 0x0)); break; case 0x02: // sitdown /* * if (battle_config.basic_skill_check && pc_checkskill(sd, NV_BASIC) < 3) { * clif_skill_fail(sd, 1, 0, 2); * break; * } */ if (character.IsSit() == true) { // Bugged client? Just refresh them World.Send(new WorldUnitSitStand(character, true), character, ESendTarget.Area); return; } if (Timer.IsValid(character.ActiveSkillTimer) == true || character.StatusChange.Option1 != EStatusOption1.None) { break; } /* * if (sd->sc.count && ( * sd->sc.data[SC_DANCING] || * (sd->sc.data[SC_GRAVITATION] && sd->sc.data[SC_GRAVITATION]->val3 == BCT_SELF) * )) //No sitting during these states either. * break; */ character.SetSit(); //skill_sit(sd, 1); World.Send(new WorldUnitSitStand(character, true), character, ESendTarget.Area); break; case 0x03: // standup if (character.IsSit() == false) { World.Send(new WorldUnitSitStand(character, false), character, ESendTarget.Area); return; } character.SetStand(); //skill_sit(sd, 0); World.Send(new WorldUnitSitStand(character, false), character, ESendTarget.Area); break; } }
public bool IsHiding() { EStatusOption hiddenOptions = (EStatusOption.Hide | EStatusOption.Cloak | EStatusOption.Chasewalk); return((StatusChange.Option & hiddenOptions) > 0); }