mirror of
https://github.com/pret/pokediamond.git
synced 2026-10-01 21:07:01 -05:00
nutdata.c
This commit is contained in:
@@ -400,7 +400,7 @@ SECTIONS {
|
||||
unk_020842D0.o (.text)
|
||||
unk_020842DC.o (.text)
|
||||
unk_020851B8.o (.text)
|
||||
unk_02085258.o (.text)
|
||||
nutdata.o (.text)
|
||||
unk_02085338.o (.text)
|
||||
unk_020854E0.o (.text)
|
||||
unk_020859C0.o (.text)
|
||||
|
||||
@@ -790,7 +790,7 @@ FUN_02040D04: ; 0x02040D04
|
||||
lsl r0, r5, #0x10
|
||||
lsr r0, r0, #0x10
|
||||
mov r1, #0x20
|
||||
bl FUN_020852E8
|
||||
bl GetNutName
|
||||
add r5, r0, #0x0
|
||||
cmp r4, #0x2
|
||||
bhs _02040D5A
|
||||
|
||||
@@ -78,7 +78,7 @@ FUN_02025128: ; 0x02025128
|
||||
push {r3-r7, lr}
|
||||
sub sp, #0x8
|
||||
add r7, r0, #0x0
|
||||
bl FUN_02085258
|
||||
bl OpenNutsDataNarc
|
||||
str r0, [sp, #0x0]
|
||||
add r0, r7, #0x0
|
||||
mov r1, #0xc0
|
||||
@@ -90,18 +90,18 @@ _02025142:
|
||||
ldr r0, [sp, #0x0]
|
||||
add r1, r6, #0x0
|
||||
add r2, r7, #0x0
|
||||
bl FUN_02085264
|
||||
bl ReadNutDataFromNarc
|
||||
add r4, r0, #0x0
|
||||
mov r1, #0x3
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
strb r0, [r5, #0x0]
|
||||
add r0, r4, #0x0
|
||||
mov r1, #0x4
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
strb r0, [r5, #0x1]
|
||||
add r0, r4, #0x0
|
||||
mov r1, #0x2
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
strb r0, [r5, #0x2]
|
||||
add r0, r4, #0x0
|
||||
bl FreeToHeap
|
||||
@@ -110,7 +110,7 @@ _02025142:
|
||||
cmp r6, #0x40
|
||||
blt _02025142
|
||||
ldr r0, [sp, #0x0]
|
||||
bl FUN_0208526C
|
||||
bl CloseNutsDataNarc
|
||||
ldr r0, [sp, #0x4]
|
||||
add sp, #0x8
|
||||
pop {r3-r7, pc}
|
||||
|
||||
@@ -1535,7 +1535,7 @@ FUN_02061750: ; 0x02061750
|
||||
sub r0, #0x95
|
||||
lsl r0, r0, #0x10
|
||||
lsr r0, r0, #0x10
|
||||
bl FUN_020852E8
|
||||
bl GetNutName
|
||||
add r4, r0, #0x0
|
||||
mov r1, #0x1
|
||||
str r1, [sp, #0x0]
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start FUN_02085258
|
||||
FUN_02085258: ; 0x02085258
|
||||
ldr r3, _02085260 ; =NARC_ctor
|
||||
add r1, r0, #0x0
|
||||
mov r0, #0x44
|
||||
bx r3
|
||||
.balign 4
|
||||
_02085260: .word NARC_ctor
|
||||
|
||||
thumb_func_start FUN_02085264
|
||||
FUN_02085264: ; 0x02085264
|
||||
ldr r3, _02085268 ; =NARC_AllocAndReadWholeMember
|
||||
bx r3
|
||||
.balign 4
|
||||
_02085268: .word NARC_AllocAndReadWholeMember
|
||||
|
||||
thumb_func_start FUN_0208526C
|
||||
FUN_0208526C: ; 0x0208526C
|
||||
ldr r3, _02085270 ; =NARC_dtor
|
||||
bx r3
|
||||
.balign 4
|
||||
_02085270: .word NARC_dtor
|
||||
|
||||
thumb_func_start FUN_02085274
|
||||
FUN_02085274: ; 0x02085274
|
||||
add r3, r0, #0x0
|
||||
add r2, r1, #0x0
|
||||
add r1, r3, #0x0
|
||||
ldr r3, _02085280 ; =AllocAndReadWholeNarcMemberByIdPair
|
||||
mov r0, #0x44
|
||||
bx r3
|
||||
.balign 4
|
||||
_02085280: .word AllocAndReadWholeNarcMemberByIdPair
|
||||
|
||||
thumb_func_start FUN_02085284
|
||||
FUN_02085284: ; 0x02085284
|
||||
ldr r3, _0208528C ; =FUN_02085274
|
||||
sub r0, #0x95
|
||||
bx r3
|
||||
nop
|
||||
_0208528C: .word FUN_02085274
|
||||
|
||||
thumb_func_start FUN_02085290
|
||||
FUN_02085290: ; 0x02085290
|
||||
cmp r1, #0xa
|
||||
bhi _020852E2
|
||||
add r1, r1, r1
|
||||
add r1, pc
|
||||
ldrh r1, [r1, #0x6]
|
||||
lsl r1, r1, #0x10
|
||||
asr r1, r1, #0x10
|
||||
add pc, r1
|
||||
_020852A0: ; jump table (using 16-bit offset)
|
||||
.short _020852B6 - _020852A0 - 2; case 0
|
||||
.short _020852BA - _020852A0 - 2; case 1
|
||||
.short _020852BE - _020852A0 - 2; case 2
|
||||
.short _020852C2 - _020852A0 - 2; case 3
|
||||
.short _020852C6 - _020852A0 - 2; case 4
|
||||
.short _020852CA - _020852A0 - 2; case 5
|
||||
.short _020852CE - _020852A0 - 2; case 6
|
||||
.short _020852D2 - _020852A0 - 2; case 7
|
||||
.short _020852D6 - _020852A0 - 2; case 8
|
||||
.short _020852DA - _020852A0 - 2; case 9
|
||||
.short _020852DE - _020852A0 - 2; case 10
|
||||
_020852B6:
|
||||
ldrh r0, [r0, #0x0]
|
||||
bx lr
|
||||
_020852BA:
|
||||
ldrb r0, [r0, #0x2]
|
||||
bx lr
|
||||
_020852BE:
|
||||
ldrb r0, [r0, #0x3]
|
||||
bx lr
|
||||
_020852C2:
|
||||
ldrb r0, [r0, #0x4]
|
||||
bx lr
|
||||
_020852C6:
|
||||
ldrb r0, [r0, #0x5]
|
||||
bx lr
|
||||
_020852CA:
|
||||
ldrb r0, [r0, #0x6]
|
||||
bx lr
|
||||
_020852CE:
|
||||
ldrb r0, [r0, #0x7]
|
||||
bx lr
|
||||
_020852D2:
|
||||
ldrb r0, [r0, #0x8]
|
||||
bx lr
|
||||
_020852D6:
|
||||
ldrb r0, [r0, #0x9]
|
||||
bx lr
|
||||
_020852DA:
|
||||
ldrb r0, [r0, #0xa]
|
||||
bx lr
|
||||
_020852DE:
|
||||
ldrb r0, [r0, #0xb]
|
||||
bx lr
|
||||
_020852E2:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
.balign 4
|
||||
|
||||
thumb_func_start FUN_020852E8
|
||||
FUN_020852E8: ; 0x020852E8
|
||||
push {r3-r5, lr}
|
||||
ldr r2, _0208530C ; =0x00000175
|
||||
add r4, r0, #0x0
|
||||
add r3, r1, #0x0
|
||||
mov r0, #0x1
|
||||
mov r1, #0x1a
|
||||
bl NewMsgDataFromNarc
|
||||
add r5, r0, #0x0
|
||||
add r1, r4, #0x0
|
||||
bl FUN_0200A914
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl DestroyMsgData
|
||||
add r0, r4, #0x0
|
||||
pop {r3-r5, pc}
|
||||
.balign 4
|
||||
_0208530C: .word 0x00000175
|
||||
|
||||
thumb_func_start FUN_02085310
|
||||
FUN_02085310: ; 0x02085310
|
||||
push {r3-r5, lr}
|
||||
mov r2, #0x5d
|
||||
add r4, r0, #0x0
|
||||
add r3, r1, #0x0
|
||||
mov r0, #0x1
|
||||
mov r1, #0x1a
|
||||
lsl r2, r2, #0x2
|
||||
bl NewMsgDataFromNarc
|
||||
add r5, r0, #0x0
|
||||
add r1, r4, #0x0
|
||||
bl FUN_0200A914
|
||||
add r4, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
bl DestroyMsgData
|
||||
add r0, r4, #0x0
|
||||
pop {r3-r5, pc}
|
||||
.balign 4
|
||||
@@ -5282,14 +5282,14 @@
|
||||
.extern FUN_020851F8
|
||||
.extern FUN_02085224
|
||||
.extern FUN_0208524C
|
||||
.extern FUN_02085258
|
||||
.extern FUN_02085264
|
||||
.extern FUN_0208526C
|
||||
.extern FUN_02085274
|
||||
.extern FUN_02085284
|
||||
.extern FUN_02085290
|
||||
.extern FUN_020852E8
|
||||
.extern FUN_02085310
|
||||
.extern OpenNutsDataNarc
|
||||
.extern ReadNutDataFromNarc
|
||||
.extern CloseNutsDataNarc
|
||||
.extern LoadNutDataSingle
|
||||
.extern LoadNutDataSingleByItemId
|
||||
.extern GetNutAttr
|
||||
.extern GetNutName
|
||||
.extern GetNutDesc
|
||||
.extern FUN_02085338
|
||||
.extern FUN_020853A8
|
||||
.extern FUN_020853B0
|
||||
|
||||
@@ -56,7 +56,7 @@ MOD68_021D74E0: ; 0x021D74E0
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #0x24
|
||||
ldrb r0, [r0, #8]
|
||||
bl FUN_02085274
|
||||
bl LoadNutDataSingle
|
||||
mov r1, #0x7f
|
||||
lsl r1, r1, #2
|
||||
str r0, [r5, r1]
|
||||
@@ -720,7 +720,7 @@ MOD68_021D7A18: ; 0x021D7A18
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #0x24
|
||||
ldrb r0, [r0, #8]
|
||||
bl FUN_020852E8
|
||||
bl GetNutName
|
||||
add r5, r0, #0
|
||||
mov r1, #0
|
||||
str r1, [sp]
|
||||
@@ -758,7 +758,7 @@ MOD68_021D7AE4: ; 0x021D7AE4
|
||||
ldr r0, [r4, r0]
|
||||
mov r1, #0x24
|
||||
ldrb r0, [r0, #8]
|
||||
bl FUN_02085310
|
||||
bl GetNutDesc
|
||||
mov r1, #0
|
||||
add r4, r0, #0
|
||||
str r1, [sp]
|
||||
@@ -831,7 +831,7 @@ MOD68_021D7B80: ; 0x021D7B80
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r4, r0]
|
||||
mov r1, #1
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r1, r0, #0
|
||||
beq _021D7BA4
|
||||
sub r1, r1, #1
|
||||
@@ -912,7 +912,7 @@ MOD68_021D7C28: ; 0x021D7C28
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #0
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
mov r1, #0xfa
|
||||
lsl r1, r1, #2
|
||||
mul r1, r0
|
||||
@@ -1381,7 +1381,7 @@ MOD68_021D7F98: ; 0x021D7F98
|
||||
ldr r0, [r4, r0]
|
||||
mov r1, #0x24
|
||||
ldrb r0, [r0, #8]
|
||||
bl FUN_02085274
|
||||
bl LoadNutDataSingle
|
||||
mov r1, #0x7f
|
||||
lsl r1, r1, #2
|
||||
str r0, [r4, r1]
|
||||
@@ -2159,7 +2159,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #5
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
mov r1, #0x65
|
||||
lsl r1, r1, #2
|
||||
@@ -2172,7 +2172,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #6
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
ldr r1, _021D8860 ; =0x0000019A
|
||||
lsl r2, r2, #0x18
|
||||
@@ -2184,7 +2184,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #7
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
ldr r1, _021D8868 ; =0x000001A6
|
||||
lsl r2, r2, #0x18
|
||||
@@ -2202,7 +2202,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #9
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
mov r1, #0x6b
|
||||
lsl r1, r1, #2
|
||||
@@ -2215,7 +2215,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #5
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
ldr r1, _021D8878 ; =0x000001B2
|
||||
lsl r2, r2, #0x18
|
||||
@@ -2232,7 +2232,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #8
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
mov r1, #0x6e
|
||||
lsl r1, r1, #2
|
||||
@@ -2245,7 +2245,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #9
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
mov r1, #0x71
|
||||
lsl r1, r1, #2
|
||||
@@ -2263,7 +2263,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #7
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
ldr r1, _021D8898 ; =0x000001D6
|
||||
lsl r2, r2, #0x18
|
||||
@@ -2275,7 +2275,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #8
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
mov r1, #0x1d
|
||||
lsl r1, r1, #4
|
||||
@@ -2294,7 +2294,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #6
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
ldr r1, _021D88A8 ; =0x000001E2
|
||||
lsl r2, r2, #0x18
|
||||
@@ -2306,7 +2306,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #7
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
ldr r1, _021D88B0 ; =0x000001EE
|
||||
lsl r2, r2, #0x18
|
||||
@@ -2318,7 +2318,7 @@ MOD68_021D85F4: ; 0x021D85F4
|
||||
lsl r0, r0, #2
|
||||
ldr r0, [r5, r0]
|
||||
mov r1, #8
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
add r2, r0, #0
|
||||
mov r1, #0x7a
|
||||
lsl r1, r1, #2
|
||||
|
||||
@@ -9161,7 +9161,7 @@ _021DBA56:
|
||||
lsl r4, r0, #2
|
||||
ldr r0, [sp, #0x24]
|
||||
ldr r0, [r0, r4]
|
||||
bl FUN_02085284
|
||||
bl LoadNutDataSingleByItemId
|
||||
mov r3, #0
|
||||
add r7, r0, #0
|
||||
add r2, r3, #0
|
||||
@@ -9196,7 +9196,7 @@ _021DBAA0:
|
||||
_021DBAA4:
|
||||
add r0, r7, #0
|
||||
add r1, r5, #5
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
ldr r1, [r4]
|
||||
add r5, r5, #1
|
||||
add r0, r1, r0
|
||||
@@ -9205,7 +9205,7 @@ _021DBAA4:
|
||||
blt _021DBAA4
|
||||
add r0, r7, #0
|
||||
mov r1, #0xa
|
||||
bl FUN_02085290
|
||||
bl GetNutAttr
|
||||
ldr r1, [sp, #0x20]
|
||||
add r0, r1, r0
|
||||
str r0, [sp, #0x20]
|
||||
|
||||
78
arm9/src/nutdata.c
Normal file
78
arm9/src/nutdata.c
Normal file
@@ -0,0 +1,78 @@
|
||||
#include "global.h"
|
||||
#include "filesystem.h"
|
||||
#include "itemtool.h"
|
||||
#include "msg_data.h"
|
||||
|
||||
#pragma thumb on
|
||||
|
||||
NARC * OpenNutsDataNarc(u32 heap_id)
|
||||
{
|
||||
return NARC_ctor(NARC_ITEMTOOL_ITEMDATA_NUTS_DATA, heap_id);
|
||||
}
|
||||
|
||||
struct NutData * ReadNutDataFromNarc(NARC * narc, u32 berry_idx, u32 heap_id)
|
||||
{
|
||||
return NARC_AllocAndReadWholeMember(narc, berry_idx, heap_id);
|
||||
}
|
||||
|
||||
void CloseNutsDataNarc(NARC * narc)
|
||||
{
|
||||
NARC_dtor(narc);
|
||||
}
|
||||
|
||||
struct NutData * LoadNutDataSingle(u32 berry_idx, u32 heap_id)
|
||||
{
|
||||
return AllocAndReadWholeNarcMemberByIdPair(NARC_ITEMTOOL_ITEMDATA_NUTS_DATA, berry_idx, heap_id);
|
||||
}
|
||||
|
||||
struct NutData * LoadNutDataSingleByItemId(u32 item_id, u32 heap_id)
|
||||
{
|
||||
return LoadNutDataSingle(item_id - FIRST_BERRY_IDX, heap_id);
|
||||
}
|
||||
|
||||
u32 GetNutAttr(struct NutData * nut, u32 attr)
|
||||
{
|
||||
switch (attr)
|
||||
{
|
||||
case 0:
|
||||
return nut->unk0;
|
||||
case 1:
|
||||
return nut->unk2;
|
||||
case 2:
|
||||
return nut->unk3;
|
||||
case 3:
|
||||
return nut->unk4;
|
||||
case 4:
|
||||
return nut->unk5;
|
||||
case 5:
|
||||
return nut->unk6;
|
||||
case 6:
|
||||
return nut->unk7;
|
||||
case 7:
|
||||
return nut->unk8;
|
||||
case 8:
|
||||
return nut->unk9;
|
||||
case 9:
|
||||
return nut->unkA;
|
||||
case 10:
|
||||
return nut->unkB;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
u16 * GetNutName(u32 berry_idx, u32 heap_id)
|
||||
{
|
||||
struct MsgData * msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 373, heap_id);
|
||||
u16 * ret = FUN_0200A914(msgData, berry_idx);
|
||||
DestroyMsgData(msgData);
|
||||
return ret;
|
||||
}
|
||||
|
||||
u16 * GetNutDesc(u32 berry_idx, u32 heap_id)
|
||||
{
|
||||
struct MsgData * msgData = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 372, heap_id);
|
||||
u16 * ret = FUN_0200A914(msgData, berry_idx);
|
||||
DestroyMsgData(msgData);
|
||||
return ret;
|
||||
}
|
||||
@@ -128,7 +128,9 @@
|
||||
#define ITEM_AIR_MAIL 146
|
||||
#define ITEM_MOSAIC_MAIL 147
|
||||
#define ITEM_BRICK_MAIL 148
|
||||
|
||||
#define ITEM_CHERI_BERRY 149
|
||||
#define FIRST_BERRY_IDX ITEM_CHERI_BERRY
|
||||
#define ITEM_CHESTO_BERRY 150
|
||||
#define ITEM_PECHA_BERRY 151
|
||||
#define ITEM_RAWST_BERRY 152
|
||||
|
||||
24
include/itemtool.h
Normal file
24
include/itemtool.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef POKEDIAMOND_ITEMTOOL_H
|
||||
#define POKEDIAMOND_ITEMTOOL_H
|
||||
|
||||
#include "global.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
// Berries (nutdata)
|
||||
|
||||
struct NutData
|
||||
{
|
||||
u16 unk0;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u8 unk4;
|
||||
u8 unk5;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
u8 unk8;
|
||||
u8 unk9;
|
||||
u8 unkA;
|
||||
u8 unkB;
|
||||
};
|
||||
|
||||
#endif //POKEDIAMOND_ITEMTOOL_H
|
||||
20
include/msg_data.h
Normal file
20
include/msg_data.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef POKEDIAMOND_MSG_DATA_H
|
||||
#define POKEDIAMOND_MSG_DATA_H
|
||||
|
||||
struct MsgData
|
||||
{
|
||||
u16 unk0;
|
||||
u16 unk2;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
union {
|
||||
u16 * raw;
|
||||
NARC * narc;
|
||||
} data;
|
||||
};
|
||||
|
||||
struct MsgData * NewMsgDataFromNarc(u32 type, u32 narcId, u32 msgId, u32 heapno);
|
||||
u16 * FUN_0200A914(struct MsgData *, u32);
|
||||
void DestroyMsgData(struct MsgData *);
|
||||
|
||||
#endif //POKEDIAMOND_MSG_DATA_H
|
||||
Reference in New Issue
Block a user