mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-11 21:18:31 -04:00
d_a_tag_ret basically done (#16)
This commit is contained in:
@@ -61,7 +61,6 @@ public:
|
||||
virtual cXyz& GetCoCP() { return m_virtual_center; }
|
||||
virtual void CalcAabBox() = 0;
|
||||
virtual bool GetNVec(cXyz const&, cXyz*) const = 0;
|
||||
virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const;
|
||||
|
||||
cM3dGAab& GetWorkAab() { return mAab; }
|
||||
cM3dGAab const& GetWorkAab() const { return mAab; }
|
||||
@@ -172,7 +171,6 @@ public:
|
||||
virtual bool CrossCo(cCcD_CylAttr const&, f32*) const;
|
||||
virtual void CalcAabBox();
|
||||
virtual bool GetNVec(cXyz const&, cXyz*) const;
|
||||
virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const;
|
||||
|
||||
}; // Size = 0x34
|
||||
|
||||
@@ -204,7 +202,6 @@ public:
|
||||
virtual cXyz& GetCoCP() { return mCenter; }
|
||||
virtual void CalcAabBox();
|
||||
virtual bool GetNVec(cXyz const&, cXyz*) const;
|
||||
virtual void getShapeAccess(cCcD_ShapeAttr::Shape*) const;
|
||||
|
||||
}; // Size = 0x38
|
||||
|
||||
@@ -497,7 +494,6 @@ public:
|
||||
virtual cCcD_GObjInf* GetGObjInf() { return NULL; }
|
||||
virtual cCcD_ShapeAttr const* GetShapeAttr() const { return NULL; }
|
||||
virtual cCcD_ShapeAttr* GetShapeAttr() { return NULL; }
|
||||
virtual void Draw(_GXColor const&) {}
|
||||
void ct();
|
||||
void Set(cCcD_SrcObj const&);
|
||||
fopAc_ac_c* GetAc();
|
||||
|
||||
@@ -70,49 +70,54 @@ public:
|
||||
/* 0x2FC */ u8 field_0x2FC[0x300 - 0x2FC];
|
||||
/* 0x300 */ f32 field_0x300;
|
||||
/* 0x304 */ daPy_demo_c mDemo;
|
||||
/* 0x31C */ void* vtbl;
|
||||
|
||||
void onFrollCrashFlg(u32);
|
||||
void getGrabActorID() const;
|
||||
void getBokoFlamePos(cXyz*);
|
||||
void setPlayerPosAndAngle(cXyz*, s16);
|
||||
virtual void getLeftHandMatrix();
|
||||
virtual void getRightHandMatrix();
|
||||
virtual void getGroundY();
|
||||
virtual void getTactMusic() const;
|
||||
virtual void getTactTimerCancel() const;
|
||||
virtual void checkPlayerGuard() const;
|
||||
virtual void getGrabMissActor();
|
||||
virtual void checkPlayerFly() const;
|
||||
virtual void checkFrontRoll() const;
|
||||
virtual void checkBottleSwing() const;
|
||||
virtual void checkCutCharge() const;
|
||||
virtual void getBokoFlamePos(cXyz*);
|
||||
virtual void checkTactWait() const;
|
||||
virtual void setTactZev(u32, int, char*);
|
||||
virtual void onDekuSpReturnFlg(u8);
|
||||
virtual void checkComboCutTurn() const;
|
||||
virtual void getBaseAnimeFrameRate();
|
||||
virtual void getBaseAnimeFrame();
|
||||
virtual void getItemID() const;
|
||||
virtual void getThrowBoomerangID() const;
|
||||
virtual void getGrabActorID() const;
|
||||
virtual void checkGrabBarrel();
|
||||
virtual void checkPlayerNoDraw();
|
||||
virtual void checkRopeTag();
|
||||
virtual void checkRopeReadyAnime() const;
|
||||
virtual void voiceStart(u32);
|
||||
virtual void setOutPower(f32, s16, int);
|
||||
virtual void onFrollCrashFlg(u32);
|
||||
virtual void getModelJointMtx(u16);
|
||||
virtual void getOldSpeedY();
|
||||
virtual void setHookshotCarryOffset(u32, cXyz const*);
|
||||
virtual void setPlayerPosAndAngle(cXyz*, s16);
|
||||
virtual void setPlayerPosAndAngle(cXyz*, csXyz*);
|
||||
virtual void setPlayerPosAndAngle(f32*[][][][]);
|
||||
virtual void setThrowDamage(cXyz*, s16, f32, f32, int);
|
||||
virtual void changeTextureAnime(u16, u16, int);
|
||||
virtual void cancelChangeTextureAnime();
|
||||
|
||||
void getSwordTopPos() const;
|
||||
void checkPlayerFly() const;
|
||||
void checkPlayerNoDraw();
|
||||
void getLeftHandPos() const;
|
||||
void checkPlayerGuard() const;
|
||||
void getRopeJumpLand() const;
|
||||
void checkRopeReadyAnime() const;
|
||||
void checkRopeForceEnd() const;
|
||||
void getHeadTopPos() const;
|
||||
void changePlayer(fopAc_ac_c*);
|
||||
void objWindHitCheck(dCcD_Cyl*);
|
||||
void setDoButtonQuake();
|
||||
void stopDoButtonQuake(int);
|
||||
void getTactMusic() const;
|
||||
void getTactTimerCancel() const;
|
||||
void getGrabMissActor();
|
||||
void checkFrontRoll() const;
|
||||
void checkBottleSwing() const;
|
||||
void checkCutCharge() const;
|
||||
void checkTactWait() const;
|
||||
void setTactZev(u32, int, char*);
|
||||
void onDekuSpReturnFlg(u8);
|
||||
void checkComboCutTurn() const;
|
||||
void getItemID() const;
|
||||
void getThrowBoomerangID() const;
|
||||
void checkGrabBarrel();
|
||||
void checkRopeTag();
|
||||
void voiceStart(u32);
|
||||
void setOutPower(f32, s16, int);
|
||||
void getModelJointMtx(u16);
|
||||
void getOldSpeedY();
|
||||
void setHookshotCarryOffset(u32, cXyz const*);
|
||||
void setPlayerPosAndAngle(f32*[][][][]);
|
||||
void setPlayerPosAndAngle(cXyz*, csXyz*);
|
||||
void setThrowDamage(cXyz*, s16, f32, f32, int);
|
||||
void changeTextureAnime(u16, u16, int);
|
||||
void cancelChangeTextureAnime();
|
||||
void getRopePos() const;
|
||||
};
|
||||
|
||||
|
||||
+2
-1
@@ -6,7 +6,8 @@
|
||||
namespace daObj {
|
||||
template <typename T>
|
||||
int PrmAbstract(const fopAc_ac_c* actor, T width, T shift) {
|
||||
return ((1 << width) - 1) & (fopAcM_GetParam(actor) >> shift);
|
||||
u32 param = fopAcM_GetParam(actor);
|
||||
return ((1 << width) - 1) & (param >> shift);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -351,7 +351,7 @@ STATIC_ASSERT(sizeof(dCcD_GObjInf) == 0xF8);
|
||||
class dCcD_Cyl : public dCcD_GObjInf, public cCcD_CylAttr {
|
||||
public:
|
||||
void Set(dCcD_SrcCyl const&);
|
||||
cCcD_ShapeAttr* GetShapeAttr();
|
||||
cCcD_ShapeAttr* GetShapeAttr() { return this; }
|
||||
void StartCAt(cXyz&);
|
||||
void MoveCAt(cXyz&);
|
||||
void MoveCTg(cXyz&);
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
#ifndef D_ITEM_H
|
||||
#define D_ITEM_H
|
||||
|
||||
void execItemGet(unsigned char);
|
||||
void checkItemGet(unsigned char, int);
|
||||
void execItemGet(u8 itemNo);
|
||||
BOOL checkItemGet(u8 itemNo, BOOL defaultVal);
|
||||
void item_func_heart();
|
||||
void item_func_green_rupee();
|
||||
void item_func_blue_rupee();
|
||||
|
||||
@@ -101,7 +101,7 @@ BOOL daAndsw2_c::chkAllSw2() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 000001D8-000002B0 .text daAndsw2_actionOnAll__FP10daAndsw2_c */
|
||||
@@ -245,7 +245,7 @@ s32 daAndsw2_c::create() {
|
||||
current.angle.z = 0;
|
||||
current.angle.x = 0;
|
||||
|
||||
return 4;
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
/* 00000530-00000538 .text daAndsw2_Draw__FP10daAndsw2_c */
|
||||
|
||||
+155
-164
@@ -3,171 +3,162 @@
|
||||
// Translation Unit: d_a_tag_ret.cpp
|
||||
//
|
||||
|
||||
#include "d_a_tag_ret.h"
|
||||
#include "d/d_a_obj.h"
|
||||
#include "d/d_item.h"
|
||||
#include "d/d_item_data.h"
|
||||
#include "d/d_cc_d.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
/* 00000078-000001D4 .text _create__Q28daTagRet5Act_cFv */
|
||||
void daTagRet::Act_c::_create() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
static dCcD_SrcCyl cyl_check_src = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0x119,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
||||
// Cylinder
|
||||
0.0, // X
|
||||
0.0, // Y
|
||||
0.0, // Z
|
||||
1000.0, // Radius
|
||||
100.0, // Height
|
||||
};
|
||||
|
||||
/* 000001D4-000002A0 .text __dt__8dCcD_CylFv */
|
||||
dCcD_Cyl::~dCcD_Cyl() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000002A0-000002E8 .text __dt__8cM3dGCylFv */
|
||||
cM3dGCyl::~cM3dGCyl() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000002E8-00000344 .text __dt__14cCcD_ShapeAttrFv */
|
||||
cCcD_ShapeAttr::~cCcD_ShapeAttr() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000344-0000038C .text __dt__8cM3dGAabFv */
|
||||
cM3dGAab::~cM3dGAab() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 0000038C-00000394 .text _delete__Q28daTagRet5Act_cFv */
|
||||
void daTagRet::Act_c::_delete() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000394-00000398 .text set_mtx__Q28daTagRet5Act_cFv */
|
||||
void daTagRet::Act_c::set_mtx() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000398-00000460 .text _execute__Q28daTagRet5Act_cFv */
|
||||
void daTagRet::Act_c::_execute() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000460-00000468 .text _draw__Q28daTagRet5Act_cFv */
|
||||
void daTagRet::Act_c::_draw() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000468-00000488 .text Mthd_Create__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
void daTagRet::@unnamed@d_a_tag_ret_cpp@::Mthd_Create(void*) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000488-000004AC .text Mthd_Delete__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
void daTagRet::@unnamed@d_a_tag_ret_cpp@::Mthd_Delete(void*) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000004AC-000004D0 .text Mthd_Execute__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
void daTagRet::@unnamed@d_a_tag_ret_cpp@::Mthd_Execute(void*) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000004D0-000004F4 .text Mthd_Draw__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
void daTagRet::@unnamed@d_a_tag_ret_cpp@::Mthd_Draw(void*) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000004F4-000004FC .text Mthd_IsDelete__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
void daTagRet::@unnamed@d_a_tag_ret_cpp@::Mthd_IsDelete(void*) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000004FC-0000050C .text GetShapeAttr__8dCcD_CylFv */
|
||||
void dCcD_Cyl::GetShapeAttr() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 0000050C-00000514 .text GetCoCP__12cCcD_CylAttrFv */
|
||||
void cCcD_CylAttr::GetCoCP() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000514-0000051C .text GetCoCP__12cCcD_CylAttrCFv */
|
||||
void cCcD_CylAttr::GetCoCP() const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 0000051C-00000524 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_AabAttrP4cXyz */
|
||||
void cCcD_CylAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000524-0000052C .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_PntAttrP4cXyz */
|
||||
void cCcD_CylAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 0000052C-00000564 .text CrossAtTg__12cCcD_CylAttrCFRC14cCcD_ShapeAttrP4cXyz */
|
||||
void cCcD_CylAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000564-0000056C .text CrossCo__12cCcD_CylAttrCFRC12cCcD_AabAttrPf */
|
||||
void cCcD_CylAttr::CrossCo(const cCcD_AabAttr&, float*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 0000056C-00000574 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_TriAttrPf */
|
||||
void cCcD_CylAttr::CrossCo(const cCcD_TriAttr&, float*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000574-0000057C .text CrossCo__12cCcD_CylAttrCFRC12cCcD_PntAttrPf */
|
||||
void cCcD_CylAttr::CrossCo(const cCcD_PntAttr&, float*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 0000057C-000005B4 .text CrossCo__12cCcD_CylAttrCFRC14cCcD_ShapeAttrPf */
|
||||
void cCcD_CylAttr::CrossCo(const cCcD_ShapeAttr&, float*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000005B4-000005B8 .text GetGObjInf__12cCcD_GObjInfCFv */
|
||||
void cCcD_GObjInf::GetGObjInf() const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000005B8-000005C0 .text GetShapeAttr__8cCcD_ObjCFv */
|
||||
void cCcD_Obj::GetShapeAttr() const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000005C0-000005C8 .text CrossAtTg__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrP4cXyz */
|
||||
void cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000005C8-000005D0 .text CrossCo__14cCcD_ShapeAttrCFRC14cCcD_ShapeAttrPf */
|
||||
void cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000005D0-000005DC .text GetCoCP__14cCcD_ShapeAttrFv */
|
||||
void cCcD_ShapeAttr::GetCoCP() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000005DC-000005E8 .text GetCoCP__14cCcD_ShapeAttrCFv */
|
||||
void cCcD_ShapeAttr::GetCoCP() const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 000005E8-00000604 .text PrmAbstract<Q38daTagRet5Act_c5Prm_e>__5daObjFPC10fopAc_ac_cQ38daTagRet5Act_c5Prm_eQ38daTagRet5Act_c5Prm_e */
|
||||
void daObj::PrmAbstract<daTagRet::Act_c::Prm_e>(const fopAc_ac_c*, daTagRet::Act_c::Prm_e, daTagRet::Act_c::Prm_e) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 00000604-0000060C .text @280@__dt__8dCcD_CylFv */
|
||||
void @280@__dt__8dCcD_CylFv {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 0000060C-00000614 .text @248@__dt__8dCcD_CylFv */
|
||||
void @248@__dt__8dCcD_CylFv {
|
||||
/* Nonmatching */
|
||||
}
|
||||
namespace daTagRet {
|
||||
struct Act_c : public fopAc_ac_c {
|
||||
public:
|
||||
enum Prm_e {
|
||||
PRM_PLAYER_ID_W = 8,
|
||||
PRM_PLAYER_ID_S = 0,
|
||||
};
|
||||
|
||||
s32 _create();
|
||||
s32 _delete();
|
||||
void set_mtx();
|
||||
s32 _execute();
|
||||
s32 _draw();
|
||||
|
||||
public:
|
||||
u8 unknown_padding[0xC];
|
||||
/* 0x29C */ dCcD_Stts mStts;
|
||||
/* 0x2D8 */ dCcD_Cyl mCyl;
|
||||
};
|
||||
|
||||
/* 00000078-000001D4 .text _create__Q28daTagRet5Act_cFv */
|
||||
s32 Act_c::_create() {
|
||||
fopAcM_SetupActor(this, daTagRet::Act_c);
|
||||
|
||||
if (checkItemGet(PEARL3, TRUE)) {
|
||||
return cPhs_UNK3_e;
|
||||
}
|
||||
|
||||
mStts.Init(0xFF, 0xFF, this);
|
||||
mCyl.Set(cyl_check_src);
|
||||
mCyl.SetR(1000.0f*mScale.x);
|
||||
mCyl.SetH(100.0f*mScale.y);
|
||||
mCyl.SetStts(&mStts);
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
/* 0000038C-00000394 .text _delete__Q28daTagRet5Act_cFv */
|
||||
s32 Act_c::_delete() {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000394-00000398 .text set_mtx__Q28daTagRet5Act_cFv */
|
||||
void Act_c::set_mtx() {
|
||||
return;
|
||||
}
|
||||
|
||||
/* 00000398-00000460 .text _execute__Q28daTagRet5Act_cFv */
|
||||
s32 Act_c::_execute() {
|
||||
mCyl.SetC(current.pos);
|
||||
mCyl.SetR(1000.0f*mScale.x);
|
||||
mCyl.SetH(100.0f*mScale.y);
|
||||
g_dComIfG_gameInfo.play.mCcS.Set(&mCyl);
|
||||
|
||||
if (mCyl.ChkCoHit()) {
|
||||
u32 playerId = daObj::PrmAbstract(this, PRM_PLAYER_ID_W, PRM_PLAYER_ID_S);
|
||||
daPy_getPlayerLinkActorClass()->onDekuSpReturnFlg(playerId);
|
||||
}
|
||||
|
||||
set_mtx();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000460-00000468 .text _draw__Q28daTagRet5Act_cFv */
|
||||
s32 Act_c::_draw() {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
namespace {
|
||||
/* 00000468-00000488 .text Mthd_Create__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
s32 Mthd_Create(void* i_this) {
|
||||
return ((Act_c*)i_this)->_create();
|
||||
}
|
||||
|
||||
/* 00000488-000004AC .text Mthd_Delete__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
u8 Mthd_Delete(void* i_this) {
|
||||
return ((Act_c*)i_this)->_delete();
|
||||
}
|
||||
|
||||
/* 000004AC-000004D0 .text Mthd_Execute__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
u8 Mthd_Execute(void* i_this) {
|
||||
return ((Act_c*)i_this)->_execute();
|
||||
}
|
||||
|
||||
/* 000004D0-000004F4 .text Mthd_Draw__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
u8 Mthd_Draw(void* i_this) {
|
||||
return ((Act_c*)i_this)->_draw();
|
||||
}
|
||||
|
||||
/* 000004F4-000004FC .text Mthd_IsDelete__Q28daTagRet25@unnamed@d_a_tag_ret_cpp@FPv */
|
||||
u8 Mthd_IsDelete(void* i_this) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static actor_method_class Mthd_Table = {
|
||||
(process_method_func)Mthd_Create,
|
||||
(process_method_func)Mthd_Delete,
|
||||
(process_method_func)Mthd_Execute,
|
||||
(process_method_func)Mthd_IsDelete,
|
||||
(process_method_func)Mthd_Draw,
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
extern actor_process_profile_definition g_profile_Tag_Ret = {
|
||||
fpcLy_CURRENT_e,
|
||||
3,
|
||||
fpcLy_CURRENT_e,
|
||||
PROC_Tag_Ret,
|
||||
&g_fpcLf_Method.mBase,
|
||||
sizeof(daTagRet::Act_c),
|
||||
0,
|
||||
0,
|
||||
&g_fopAc_Method.base,
|
||||
0x005F,
|
||||
&daTagRet::Mthd_Table,
|
||||
0x00040000,
|
||||
fopAc_ACTOR_e,
|
||||
fopAc_CULLBOX_0_e,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user