Raised This Month: $12 Target: $400
 3% 

Improving and optimizing this thing


Post New Thread Reply   
 
Thread Tools Display Modes
Krystek.
Member
Join Date: May 2022
Old 05-29-2022 , 19:50   Re: Improving and optimizing this thing
Reply With Quote #11

Quote:
Originally Posted by Bugsy View Post
I didnt realize you also had separate flags for each, I added that to the above code. If you have any questions on using this, let me know.
PHP Code:
@MENU_KNIFE(id) {
    
    new 
Knife menu_create(fmt("\dSkins \rKnifes\d"), "@MENU_KNIFE_Handler")
    
    for(new 
0sizeof(KnifeNames); i++){
        if(
FlagsKnife[i] == ADMIN_LEVEL_H){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"KnifeNames[i]), ""FlagsKnife[i], -1);
        }
        if(
FlagsKnife[i] == ADMIN_LEVEL_D){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_D "\y(MODEL MIKU)\w" "\d(MODEL MIKU)\d"KnifeNames[i]), ""FlagsKnife[i], -1);            
        }
        if(
FlagsKnife[i] == 0){
            
menu_additem(Knife fmt("\d»\w %s"KnifeNames[i]), ""FlagsKnife[i], -1);
        }
    }
    
menu_setprop(KnifeMPROP_EXITNAME"Exit");

    
menu_display(idKnife);

    return 
PLUGIN_HANDLED;
}
@
MENU_KNIFE_Handler(idKnifeitem) {
    if (
item == MENU_EXIT) {
        
menu_destroy(Knife);
        return 
PLUGIN_HANDLED;
    }
    
    if(
FlagsKnife[item] == 0){
        
player_item[1][id] = item
    
}
    else if(
FlagsKnife[item] > && get_user_flags(id) & FlagsKnife[item]){
        
player_item[1][id] = item
    
}

    
Set_Model(id);
    
SaveModels(id)    

    
menu_destroy(Knife);

    return 
PLUGIN_HANDLED;

How do I apply this to this code?
Do I understand correctly?

HTML Code:
for(new i = 0; i < sizeof(Knives); i++) {
 KnivesItems[ Knives ][ ItemData ]
Am I wrong? This code is so complicated that I don't know exactly how to do it ...

Last edited by Krystek.; 05-29-2022 at 19:50.
Krystek. is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 05-29-2022 , 21:33   Re: Improving and optimizing this thing
Reply With Quote #12

It's pretty simple, and better, once you learn how to this type of organization.

KnivesItems[ Which knife type/index ][ The data you want for the knife ]

These are your knife types, you can pass Knives:value or DefaultKnife to the array. The Knives:value method is good if you need to loop through all knife types, which is shown in @MENU_KNIFE below.
PHP Code:
enum Knives
{
    
DefaultKnife//index 0
    
SomeKnife1//index 1
    
SomeKnife2  //index 2

So if you want the name of the first knife:
PHP Code:
KnivesItemsKnives:][ ItemName ]
//or
KnivesItemsDefaultKnife ][ ItemName 
If you want the flags of the first knife:
PHP Code:
KnivesItemsKnives:][ ItemFlags ]
//or
KnivesItemsDefaultKnife ][ ItemFlags 
If you want the name of the first knife:
PHP Code:
KnivesItemsKnives:][ ItemModel ]
//or
KnivesItemsDefaultKnife ][ ItemModel 
Try this:
PHP Code:
@MENU_KNIFE(id
{
    
    new 
Knife menu_create(fmt("\dSkins \rKnifes\d"), "@MENU_KNIFE_Handler")
    
    for(new 
Knives:0Knivesi++)
    {
        if(
KnivesItems[i][ ItemFlags ] == ADMIN_LEVEL_H){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);
        }
        if(
KnivesItems[i][ ItemFlags ] == ADMIN_LEVEL_D){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_D "\y(MODEL MIKU)\w" "\d(MODEL MIKU)\d"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);            
        }
        if(
KnivesItems[i][ ItemFlags ] == 0){
            
menu_additem(Knife fmt("\d»\w %s"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);
        }
    }
    
menu_setprop(KnifeMPROP_EXITNAME"Exit");

    
menu_display(idKnife);

    return 
PLUGIN_HANDLED;
}

@
MENU_KNIFE_Handler(idKnifeitem
{
    if (
item == MENU_EXIT) {
        
menu_destroy(Knife);
        return 
PLUGIN_HANDLED;
    }
    
    if(
KnivesItems[item][ ItemFlags ] == 0){
        
player_item[1][id] = item
    
}
    else if(
KnivesItems[item][ ItemFlags ] > && get_user_flags(id) & KnivesItems[item][ ItemFlags ]){
        
player_item[1][id] = item
    
}

    
Set_Model(id);
    
SaveModels(id)    

    
menu_destroy(Knife);

    return 
PLUGIN_HANDLED;

__________________
Bugsy is offline
Krystek.
Member
Join Date: May 2022
Old 05-29-2022 , 21:52   Re: Improving and optimizing this thing
Reply With Quote #13

Quote:
Originally Posted by Bugsy View Post
It's pretty simple, and better, once you learn how to this type of organization.

KnivesItems[ Which knife type/index ][ The data you want for the knife ]

These are your knife types, you can pass Knives:value or DefaultKnife to the array. The Knives:value method is good if you need to loop through all knife types, which is shown in @MENU_KNIFE below.
PHP Code:
enum Knives
{
    
DefaultKnife//index 0
    
SomeKnife1//index 1
    
SomeKnife2  //index 2

So if you want the name of the first knife:
PHP Code:
KnivesItemsKnives:][ ItemName ]
//or
KnivesItemsDefaultKnife ][ ItemName 
If you want the flags of the first knife:
PHP Code:
KnivesItemsKnives:][ ItemFlags ]
//or
KnivesItemsDefaultKnife ][ ItemFlags 
If you want the name of the first knife:
PHP Code:
KnivesItemsKnives:][ ItemModel ]
//or
KnivesItemsDefaultKnife ][ ItemModel 
Try this:
PHP Code:
@MENU_KNIFE(id
{
    
    new 
Knife menu_create(fmt("\dSkins \rKnifes\d"), "@MENU_KNIFE_Handler")
    
    for(new 
Knives:0Knivesi++)
    {
        if(
KnivesItems[i][ ItemFlags ] == ADMIN_LEVEL_H){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);
        }
        if(
KnivesItems[i][ ItemFlags ] == ADMIN_LEVEL_D){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flags(id) & ADMIN_LEVEL_D "\y(MODEL MIKU)\w" "\d(MODEL MIKU)\d"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);            
        }
        if(
KnivesItems[i][ ItemFlags ] == 0){
            
menu_additem(Knife fmt("\d»\w %s"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);
        }
    }
    
menu_setprop(KnifeMPROP_EXITNAME"Exit");

    
menu_display(idKnife);

    return 
PLUGIN_HANDLED;
}

@
MENU_KNIFE_Handler(idKnifeitem
{
    if (
item == MENU_EXIT) {
        
menu_destroy(Knife);
        return 
PLUGIN_HANDLED;
    }
    
    if(
KnivesItems[item][ ItemFlags ] == 0){
        
player_item[1][id] = item
    
}
    else if(
KnivesItems[item][ ItemFlags ] > && get_user_flags(id) & KnivesItems[item][ ItemFlags ]){
        
player_item[1][id] = item
    
}

    
Set_Model(id);
    
SaveModels(id)    

    
menu_destroy(Knife);

    return 
PLUGIN_HANDLED;

And when it comes to set_model will it be good? set_pev( index, pev_viewmodel2, KnivesItems[ player_item[ 1 ][ index ]]);
Krystek. is offline
Krystek.
Member
Join Date: May 2022
Old 05-29-2022 , 22:06   Re: Improving and optimizing this thing
Reply With Quote #14

Code:
	for(new Knives:i = 0; i < Knives; i++) {
	if(KnivesItems[item][ ItemFlags ] == 0) {
        else if(KnivesItems[item][ ItemFlags ] > 0 && get_user_flags( index ) & KnivesItems[ item ][ ItemFlags ]){
        set_pev( index, pev_viewmodel2, KnivesItems[ player_item[ 1 ][ index ]]);
Returns error tag_mismatch
Krystek. is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 05-29-2022 , 22:10   Re: Improving and optimizing this thing
Reply With Quote #15

If player_item[] holds the players knive index/type, I'd define it as:
PHP Code:
new player_item[MAX_PLAYERS 1]
//instead of
new player_item][MAX_PLAYERS 1]

//if it needs to hold both knife type and p90 type
new player_item[MAX_PLAYERS 1][ 
Then do:
PHP Code:
set_pevindexpev_viewmodel2KnivesItemsplayer_itemid ] ][ ItemModel ] );
//or
//Assuming 0=Knife, 1=P90
set_pevindexpev_viewmodel2KnivesItemsplayer_itemid ][ ] ][ ItemModel ] ); 
__________________
Bugsy is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 05-29-2022 , 22:12   Re: Improving and optimizing this thing
Reply With Quote #16

To fix the tag mismatch in this function, anytime you use item, tag it with Knives:

KnivesItems[ Knives:item ][ ItemFlags ]
__________________
Bugsy is offline
Krystek.
Member
Join Date: May 2022
Old 05-29-2022 , 22:17   Re: Improving and optimizing this thing
Reply With Quote #17

Quote:
Originally Posted by Bugsy View Post
To fix the tag mismatch in this function, anytime you use item, tag it with Knives:

KnivesItems[ Knives:item ][ ItemFlags ]
And why does this line appear because I don't understand for(new Knives:i = 0; i < Knives; i++) {
Krystek. is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 05-29-2022 , 22:26   Re: Improving and optimizing this thing
Reply With Quote #18

Because the array is sized using an enumerator (enum), which then requires that any time you index the array, it expects a variable that is tagged with the enum.

So you can either do:
PHP Code:
new Knives:item;
KnivesItemsitem ][ ItemFlags //tag not needed because item is already defined using the Knives tag
//or
new item;
KnivesItemsKnives:item ][ ItemFlags //Knives: tag needed since item is not defined with Knives tag 
With this:
PHP Code:
for(new Knives:0Knivesi++) {

//Knives:i makes the compiler know that i is an index/tag of Knives 
When an enum is defined, the enumerator name is the next value that would come in the list

PHP Code:
enum Knives //3
{
    
DefaultKnife//0
    
SomeKnife1//1
    
SomeKnife2 //2

Making the for-loop equate to this
PHP Code:
for(new Knives:(DefaultKnife) ; Knives (or 3you will loop through all knives) ; i++) { 
If this is over your head then stick with individual arrays, this isn't really going to benefit functionality, it's more of a code readability/organization type of change.
__________________

Last edited by Bugsy; 05-29-2022 at 22:31.
Bugsy is offline
Krystek.
Member
Join Date: May 2022
Old 05-29-2022 , 22:38   Re: Improving and optimizing this thing
Reply With Quote #19

Quote:
Originally Posted by Bugsy View Post
Because the array is sized using an enumerator (enum), which then requires that any time you index the array, it expects a variable that is tagged with the enum.

So you can either do:
PHP Code:
new Knives:item;
KnivesItemsitem ][ ItemFlags //tag not needed because item is already defined using the Knives tag
//or
new item;
KnivesItemsKnives:item ][ ItemFlags //Knives: tag needed since item is not defined with Knives tag 
With this:
PHP Code:
for(new Knives:0Knivesi++) {

//Knives:i makes the compiler know that i is an index/tag of Knives 
When an enum is defined, the enumerator name is the next value that would come in the list

PHP Code:
enum Knives //3
{
    
DefaultKnife//0
    
SomeKnife1//1
    
SomeKnife2 //2

Making the for-loop equate to this
PHP Code:
for(new Knives:(DefaultKnife) ; Knives (or 3you will loop through all knives) ; i++) { 
If this is over your head then stick with individual arrays, this isn't really going to benefit functionality, it's more of a code readability/organization type of change.
I'm slowly getting the hang of it, but I prefer to ask why exactly this happens and why the tag_mismatch occurs.
Krystek. is offline
Krystek.
Member
Join Date: May 2022
Old 05-29-2022 , 22:45   Re: Improving and optimizing this thing
Reply With Quote #20

Quote:
Originally Posted by Bugsy View Post
If this is over your head then stick with individual arrays, this isn't really going to benefit functionality, it's more of a code readability/organization type of change.
PHP Code:
#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < nvault >

new const PLUGIN[] = "Skins"
new const VERSION[] = "1.0.0"
new const AUTHOR[] = ""

new const gcCommands[][] = { "say /skins""say /skiny""say /skin""say /modele""say /model""say /models" };

enum Knives {
    
DefaultKnife,
    
SomeKnife1,
    
SomeKnife2
}

enum P90s
{
    
DefaultP90,
    
SomeP901,
    
SomeP902
}

enum ItemData {
    
ItemName64 ],
    
ItemModel64 ],
    
ItemFlags
}

new const 
KnivesItemsKnives ][ ItemData ] = {
    { 
"Podstawowy" "models/v_knife.mdl" },
    { 
"Zwykly \d×\w Tajga" "models/PB_GH/KNIFE_GH/v_knife_boreal_forest.mdl" },
    { 
"Zwykly \d×\w Siatka safari" "models/PB_GH/KNIFE_GH/v_knife_safari_mesh.mdl" }
};

new const 
P90ItemsP90s ][ ItemData ] =
{
    { 
"Podstawowy" "models/PB_GH/P90_GH/v_p90_rabbit.mdl" },
    { 
"P90 \d×\w Asiimov" "models/PB_GH/P90_GH/v_p90_assimov.mdl" },
    { 
"P90 \d×\w Wojenny kurczak" "models/PB_GH/P90_GH/v_p90_chicken_of_war.mdl" }
};

new const 
weaponSOUND[][] = {
    
"sound/weapons/blockas1_change1.wav",
    
"sound/weapons/blockas1_change2.wav",
    
"sound/weapons/blockas1_reload_loop.wav",
    
"sound/weapons/blockas2_change1_1.wav",
    
"sound/weapons/blockas2_change2_1.wav",
    
"sound/weapons/blockas2_draw.wav",
    
"sound/weapons/blockas2_idle.wav",
    
"sound/weapons/blockas2_reload.wav",
    
"sound/weapons/blockas2_shoot_end.wav",
    
"sound/weapons/blockas2_shoot_start.wav"
};

new 
player_item][ MAX_PLAYERS ];
new 
g_vault;

public 
plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_event("CurWeapon""CurWeapon""be""1=1");

    
register_menucmd(register_menuid("MENU_MAIN"), 1023"MENU_MAIN_Handler");

    
register_menucmd(register_menuid("@MENU_KNIFE"), 1023"@MENU_KNIFE_Handler");
    
register_menucmd(register_menuid("@MENU_P90"), 1023"@MENU_P90_Handler");

    for(new 
0sizeof(gcCommands); i++) 
        
register_clcmd(gcCommands[i], "Command_MainMenu");
    
    
g_vault nvault_open("PB_Skins_dev");
}

public 
client_connectindex ) {
    
LoadsModelsindex );
}

public 
client_disconnectedindex ) {
    
player_item][ index ] = 0;
    
player_item][ index ] = 0;
}

public 
plugin_end()
    
nvault_close(g_vault);

public 
plugin_precache() {
    for ( new 
Knives:kKnifeID DefaultKnife kKnifeID Knives kKnifeID++ ) {
        
precache_modelKnivesItemskKnifeID ][ ItemModel ] );
    }
    
    for ( new 
P90s:pP90ID DefaultP90 pP90ID P90s pP90ID++ ) {
        
precache_modelP90ItemspP90ID ][ ItemModel ] );
    }

    for (new 
0sizeof weaponSOUNDi++)
    
precache_generic(weaponSOUND[i]);    
}

public 
Command_MainMenuindex ){
    new 
szMenu[512], len 0;
    
    
len formatex(szMenu[len], charsmax(szMenu) - len"\dSkins Menu^n^n");
    
    
len += formatex(szMenu[len], charsmax(szMenu) - len"\r1. \d» \wSkins \rKnife^n^n");
    
len += formatex(szMenu[len], charsmax(szMenu) - len"\r2. \d» \wSkins \rP90 \y(VIP)^n");
    
len += formatex(szMenu[len], charsmax(szMenu) - len"^n^n\r0. \wExit");
    
    
show_menuindex, (<< 0)|(<< 1)|(<< 2)|(<< 3)|(<< 4)|(<< 5)|(<< 9), szMenu, -1"MENU_MAIN" );
    return 
PLUGIN_HANDLED;    
}

public 
MENU_MAIN_Handlerindexkey)
{
    switch(
key)
    {
        case 
0: @MENU_KNIFEindex );
        case 
1: @MENU_P90index );
    }
}

@
MENU_KNIFEindex ) {
    
    new 
Knife menu_create(fmt("\dPaintball - GreenHaze.pl^n\r[PB] \wWybor skina do \rNOZA\d"), "@MENU_KNIFE_Handler")
    
    for(new 
Knives:0Knivesi++) {
        if(
KnivesItems[i][ ItemFlags ] == ADMIN_LEVEL_H){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flagsindex ) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);
        }
        if(
KnivesItems[i][ ItemFlags ] == ADMIN_LEVEL_D){
            
menu_additem(Knife fmt("\d» %s %s"get_user_flagsindex ) & ADMIN_LEVEL_D "\y(MODEL MIKU)\w" "\d(MODEL MIKU)\d"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);            
        }
        if(
KnivesItems[i][ ItemFlags ] == 0){
            
menu_additem(Knife fmt("\d»\w %s"KnivesItems[i][ ItemName ]), ""KnivesItems[i][ ItemFlags ], -1);
        }
    }

    
menu_setprop(KnifeMPROP_EXITNAME"Wyjscie");
    
menu_setprop(KnifeMPROP_BACKNAME"Poprzednia strona");
    
menu_setprop(KnifeMPROP_NEXTNAME"Nastepna strona");

    
menu_displayindexKnife );

    return 
PLUGIN_HANDLED;
}
@
MENU_KNIFE_HandlerindexKnifeitem ) {
    if (
item == MENU_EXIT) {
        
menu_destroy(Knife);
        return 
PLUGIN_HANDLED;
    }
    
    if(
KnivesItemsKnives:item ][ ItemFlags ] == 0) {
        
player_item][ index ] = item
    
}
    else if(
KnivesItemsKnives:item ][ ItemFlags ] > && get_user_flagsindex ) & KnivesItemsKnives:item ][ ItemFlags ]){
        
player_item][ index ] = item
    
}

    
SetsModelsindex );
    
SavesModelsindex )    

    
menu_destroy(Knife);

    return 
PLUGIN_HANDLED;
}

@
MENU_P90(index) {
    
    new 
P90 menu_create(fmt("\dSkins \rP90\d"), "@MENU_P90_Handler")
    
    for(new 
P90s:0P90si++) {
        if(
P90Items[i][ ItemFlags ] == ADMIN_LEVEL_H){
            
menu_additem(P90 fmt("\d» %s %s"get_user_flagsindex ) & ADMIN_LEVEL_H "\y(VIP)\w" "\d(VIP)\d"P90Items[i][ ItemName ]), ""P90Items[i][ ItemFlags ], -1);
        }
        if(
P90Items[i][ ItemFlags ] == ADMIN_LEVEL_D){
            
menu_additem(P90 fmt("\d» %s %s"get_user_flagsindex ) & ADMIN_LEVEL_D "\y(MODEL MIKU)\w" "\d(MODEL MIKU)\d"P90Items[i][ ItemName ]), ""P90Items[i][ ItemFlags ], -1);            
        }
        if(
P90Items[i][ ItemFlags ] == 0){
            
menu_additem(P90 fmt("\d»\w %s"P90Items[i][ ItemName ]), ""P90Items[i][ ItemFlags ], -1);
        }
    }

    
menu_setprop(P90MPROP_EXITNAME"Exit");

    
menu_display(indexP90);

    return 
PLUGIN_HANDLED;
}
@
MENU_P90_Handler(indexP90item) {
    if (
item == MENU_EXIT) {
        
menu_destroy(P90);
        return 
PLUGIN_HANDLED;
    }
    
    if(
P90ItemsP90s:item ][ ItemFlags ] == 0) {
        
player_item][ index ] = item
    
}
    else if(
P90ItemsP90s:item ][ ItemFlags ] > && get_user_flagsindex ) & P90ItemsP90s:item ][ ItemFlags ]) {
        
player_item][ index ] = item
    
}

    
SetsModels(index);
    
SavesModels(index);

    
menu_destroy(P90);

    return 
PLUGIN_HANDLED;
}

public 
LoadsModelsindex ){
    
    new 
pszName[33][64]; get_user_nameindexpszNameindex ], charsmax(pszName));
    new 
pszValue[128];    
    
    if(
nvault_get(g_vaultfmt("%s"pszNameindex ]), pszValuecharsmax(pszValue))) 
    {
        new 
skinUser[7][32];
        
parse(pszValueskinUser[1], charsmax(skinUser), skinUser[2]);

        
player_item][ index ] = str_to_num(skinUser[1]);
        
player_item][ index ] = str_to_num(skinUser[2]);        
    }
    return 
PLUGIN_CONTINUE;
}
public 
SavesModelsindex ){
    
    new 
pszName[33][64]; get_user_name(indexpszNameindex ], charsmax(pszName));

    
nvault_set(g_vaultfmt("%s"pszNameindex ]), fmt("%i %i"player_item][ index ], player_item][ index ]));
    
    return 
PLUGIN_CONTINUE;
}

public 
SetsModelsindex ) {
    if ( !
is_user_connectedindex ) ) {
        return 
PLUGIN_HANDLED;
    }

    switch( 
get_user_weaponindex ) ) {
        case 
CSW_KNIFE: {
            
set_pevindexpev_viewmodel2KnivesItemsKnives:player_item][ index ] ][ ItemModel ] );
        }
        case 
CSW_P90: {
            
set_pevindexpev_viewmodel2P90ItemsP90s:player_item][ index ] ][ ItemModel ] );
        }
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
CurWeaponindex ) {
    if ( !
is_user_connectedindex ) ) {
        return 
PLUGIN_HANDLED;
    }

    switch( 
get_user_weaponindex ) ) {
        case 
CSW_KNIFECSW_P90: {
            
SetsModelsindex );
        }        
    }

    return 
PLUGIN_CONTINUE;

Do you think this is okay? The tag_mismatch is just occurring in lines 127 and 172.
Krystek. is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 06:46.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode