Raised This Month: $ Target: $400
 0% 

NEW! Avatar Mod [ CS 1.6 ] I need some help :S


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
NotGoodNamesLeft
Junior Member
Join Date: May 2011
Old 08-01-2011 , 04:54   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #1

Quote:
Originally Posted by .Dare Devil. View Post
This is avatar : the last airbender
or something else avatar xD ?
Avatar
NotGoodNamesLeft is offline
Krle
Senior Member
Join Date: Jul 2011
Location: Serbia, Nis
Old 08-01-2011 , 10:45   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #2

Quote:
Originally Posted by NotGoodNamesLeft View Post
Avatar
What do you mean -.-
__________________

Sorry about my BAD English
Krle is offline
Send a message via MSN to Krle
NotGoodNamesLeft
Junior Member
Join Date: May 2011
Old 08-02-2011 , 04:38   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #3

Quote:
Originally Posted by Krle View Post
What do you mean -.-
i Mean The Avatar not The Last Airbender
NotGoodNamesLeft is offline
Krle
Senior Member
Join Date: Jul 2011
Location: Serbia, Nis
Old 07-29-2011 , 08:09   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #4

Have you Watched film Avatar? If you did, you will know whats this all about, if no, watch it..

When i buy XP, when someone is in server too, server crashes, but if i'm alone i can buy :S
Don't know how to fix that FIXED

PHP Code:
CENSURED! PRIVATE CODE

Last edited by Krle; 08-18-2011 at 01:47.
Krle is offline
Send a message via MSN to Krle
.Dare Devil.
Veteran Member
Join Date: Sep 2010
Old 07-29-2011 , 09:06   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #5

Quote:
Originally Posted by Krle View Post
Have you Watched film Avatar? If you did, you will know whats this all about, if no, watch it..

When i buy XP, when someone is in server too, server crashes, but if i'm alone i can buy :S
Don't know how to fix that

Code:
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <nvault>
 
#define MAXCLASSES 3
 
new const CLASSES_CT[MAXCLASSES][] = {
    "None", "Brz Avatar", "Nevidljiv Avatar"
}
 
new const CLASSES_T[MAXCLASSES][] = {
    "None", "Marinac", "Komandant"
}
 
new const LEVELS[15] = {
    0, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768
}
 
new PlayerXP[33]
new PlayerLevel[33]
new PlayerClassCT[33]
new PlayerClassT[33]
 
new KillExpirience
new SaveExpirience
new g_Vault
 
new g_msgStatusIcon /*BuyZoneRemover*/
 
new bool:drop_locked /*No Weapon Drop*/
 
public plugin_init()
{
    register_plugin ("Avatar Mod", "0.3", "Krle" )
 
    RegisterHam ( Ham_Spawn, "player", "BeginningCT", 1 )
    RegisterHam ( Ham_Spawn, "player", "BeginningT", 1 )
 
    register_event ( "CurWeapon", "CurWeapon", "be", "1=1")
    register_event ( "DeathMsg", "eDeath", "a" )
 
    register_message ( get_user_msgid ( "TextMsg" ), "message_TextMsg" ) /*Win Message*/
 
    g_msgStatusIcon = get_user_msgid ( "StatusIcon" ) /*BuyZoneRemover*/
    register_message ( g_msgStatusIcon, "msgStatusIcon" ) /*BuyZoneRemover*/
 
    SaveExpirience = register_cvar ( "xp_save", "1" )
    KillExpirience = register_cvar ( "xp_per_kill", "20" )
 
    g_Vault = nvault_open ( "AvatarMod" )
 
    register_clcmd( "say /classct", "ChangeClassCT" )
    register_clcmd( "say_team /class", "ChangeClassCT" )
 
    register_clcmd( "say /classt", "ChangeClassT" )
    register_clcmd( "say_team /classt", "ChangeClassT" )
 
    register_clcmd( "say /xp", "ShowHud" )
    register_clcmd( "say_team /xp", "ShowHud" )
 
    register_clcmd ( "say /shop", "Shop" )
    register_clcmd ( "say_team /shop", "Shop" )
 
    register_clcmd ( "say /thirdperson", "ThirdPersonView" ) /*Trece Lice*/
    register_clcmd ( "say /firstperson", "FirstPersonView" ) /*Prvo Lice*/
 
    register_clcmd("drop","drop",0,"")
 
    register_logevent("round_start", 2, "0=World triggered", "1=Round_Start")
 
    set_task(30.0, "Help")
}
 
public plugin_precache()
{
    precache_model ( "models/player/avatar/avatar.mdl" )
    precache_model ( "models/player/commander/commander.mdl" )
    precache_model ( "models/player/marine/marine.mdl" )
 
    precache_model ( "models/avatar_mod/v_soldier_ak47.mdl" )
    precache_model ( "models/avatar_mod/p_soldier_ak47.mdl" )
    precache_model ( "models/avatar_mod/v_soldier_deagle.mdl" )
    precache_model ( "models/avatar_mod/p_soldier_deagle.mdl" )
    precache_model ( "models/avatar_mod/v_soldier_m4a1.mdl" )
    precache_model ( "models/avatar_mod/p_soldier_m4a1.mdl" )
 
    precache_model ( "models/avatar_mod/v_avatar_knife.mdl" )
 
    precache_model ( "models/rpgrocket.mdl" ) /*Ovo je za ThirdPerson*/
}
 
public server_cfg()
{
    server_cmd ( "sv_maxspeed 1600" )
}
 
public eDeath()
{    
    new attacker = read_data(1)
    new id = read_data(2)
 
    if(id != attacker)
    {
        PlayerXP[attacker] += get_pcvar_num ( KillExpirience )
    }
 
    if ( PlayerLevel[id] < 15 )
    {
        while ( PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]] )
        {
            PlayerLevel[attacker] += 1
            client_print ( attacker, print_chat, "[Avatar Mod] Cestitamo, sada ste level ^3%i !", PlayerLevel[id] )
        }
        ShowHud(attacker)
        SaveData(attacker)
    }
    return PLUGIN_HANDLED 
}
 
public ShowHud ( id ) 
{
    if ( cs_get_user_team ( id ) == CS_TEAM_CT )
    {
        set_hudmessage(42, 255, 42, 0.05, 0.25, 0, 6.0, 12.0)
        show_hudmessage(id, "[Klasa : %s]^n[Level : %i]^n[Iskustvo : %i / %i]^n[Energija : %i]", CLASSES_CT[PlayerClassCT[id]], PlayerLevel[id], PlayerXP[id], LEVELS[PlayerLevel[id]], get_user_health(id))
    }
 
    if ( cs_get_user_team ( id )  == CS_TEAM_T )
    {
        set_hudmessage( 42, 255, 42, 0.05, 0.25, 0, 6.0, 12.0 )
        show_hudmessage ( id, "[Klasa : %s]^n[Level : %i]^n[Iskustvo : %i / %i]^n[Energija : %i]", CLASSES_T[PlayerClassT[id]], PlayerLevel[id], PlayerXP[id], LEVELS[PlayerLevel[id]],  get_user_health(id))
    }
}
 
public Shop ( id ) 
{
    new menu = menu_create ( "Shop:", "Shop_Handle" )
    menu_additem ( menu, "Aspirin \r[ Dodaje \y30 \health points ] \yCost: \r100$" )
    menu_additem ( menu, "Iskustvo \r[ Dodaje \y100 \rexperience poena ] \yCost: \r500$" )
    menu_additem ( menu, "Super Iskustvo \r[ Dodaje \y300 \rexperience poena ] \yCost: \r1500$" )
 
    menu_display ( id, menu )
}
 
public Shop_Handle ( id, menu, item ) 
{
    if ( item == MENU_EXIT ) 
    {
        menu_destroy ( menu )
        ColorChat ( id, GREEN, "[Shop] ^1Closing menu..." )
    }
    menu_display ( id, menu )
    switch ( item ) 
    {
        case 0: 
        {
            if ( cs_get_user_money ( id ) < 100 ) 
            {
                ColorChat ( id, GREEN, "[Shop] ^1You don't have enough money :(" )
                return PLUGIN_CONTINUE
            }
            cs_set_user_money ( id, cs_get_user_money ( id ) - 100 )
            set_user_health ( id, get_user_health ( id ) + 30 )
            ColorChat ( id, GREEN, "[Shop] ^1You bought Aspirine :)" )
        }
 
        case 1: 
        {
            if ( cs_get_user_money ( id ) < 500 ) 
            {
                ColorChat (id, GREEN, "[Shop] ^1You don't have enough money :(" )
                return PLUGIN_CONTINUE
            }
            cs_set_user_money ( id, cs_get_user_money ( id ) - 500 )
            PlayerXP[id] += 300
            ColorChat ( id, GREEN, "[Shop] ^1You bought Experience :)" )
            eDeath()
        }
        case 2: 
        {
            if ( cs_get_user_money ( id ) < 1500 ) 
            {
                ColorChat ( id, GREEN, "[Shop] ^1You don't have enough money :(" )
                return PLUGIN_CONTINUE
            }
            cs_set_user_money ( id, cs_get_user_money ( id ) - 1500 )
            PlayerXP[id] += 300
            ColorChat ( id, GREEN, "[Shop] ^1You bought Super Experience :)" )
            eDeath()
        }
    }
    return PLUGIN_CONTINUE
}
 
public ChangeClassCT ( id ) 
{
    new menu = menu_create ( "Izaberi svog Avatara:", "ChangeClassCT_Handle" )
    menu_additem( menu, "Fast Avatar \r[ Ovaj \yAvatar \rtrci veoma brzo ]", "1", 0 )
    menu_additem( menu, "Invisible Avatar \r[ Ovaj \yAvatar \rje nevidljiv ]", "2", 0 )
 
    menu_setprop(menu , MPROP_EXIT , MEXIT_ALL)
    menu_display(id , menu , 0)
}
 
 
public ChangeClassCT_Handle ( id, menu, item ) /*Sta se desava kad igrac izabere klasu*/
{
    if ( cs_get_user_team ( id ) == CS_TEAM_CT )
    {
        if ( item == MENU_EXIT )
        {
            menu_destroy ( menu )
            ColorChat ( id, GREEN, "[Avatar Mod] ^1Zavaram menu" )
        }
 
        new szCommand[6], szName[64]
        new access, callback
 
        menu_item_getinfo ( menu, item, access, szCommand, 5, szName, 63, callback )
 
        new i = str_to_num(szCommand)
 
        if(PlayerClassCT[id] != i) 
        {
            PlayerClassCT[id] = i
            ColorChat ( id, BLUE, "[Avatar Mod] ^1Sada si ^4%s", CLASSES_CT[i])
        } 
        else
        {
            ColorChat ( id, BLUE, "[Avatar Mod] ^1Vec si ^4%s", CLASSES_CT[i])
        }
 
        menu_destroy(menu)
        ColorChat ( id, GREEN, "[Avatar Mod] ^1Zatvaram menu" )
    }
    return PLUGIN_CONTINUE
}
 
public ChangeClassT ( id )
{
    new menu = menu_create ( "Izaberi svog Vojnika:", "ChangeClassT_Handle" )
    menu_additem ( menu, "Marinac \r[ Dobija \yDeagle \r]", "1", 0 )
    menu_additem ( menu, "Komandant \r[ Dobija \yM4A1 \ri \yAK47 \r]", "2", 0 )
 
    menu_setprop(menu , MPROP_EXIT , MEXIT_ALL)
    menu_display(id , menu , 0)
 
    return PLUGIN_CONTINUE
}
 
public ChangeClassT_Handle ( id, menu, item ) /*Sta se desava kad igrac izabere klasu*/
{
    if ( cs_get_user_team ( id ) == CS_TEAM_T )
    {
        if ( item == MENU_EXIT )
        {
            menu_destroy ( menu )
            ColorChat ( id, GREEN, "[Avatar Mod] ^1Zavaram menu" )
        }
 
        new szCommand[6] , szName[64]
        new access , callback
 
        menu_item_getinfo ( menu, item, access, szCommand, 5, szName, 63, callback )
 
        new i = str_to_num(szCommand)
 
        if(PlayerClassT[id] != i) 
        {
            PlayerClassT[id] = i;
            ColorChat ( id, BLUE, "[Avatar Mod] ^1Sada si ^4%s", CLASSES_T[i])
        } 
        else
        {
            ColorChat ( id, BLUE, "[Avatar Mod] ^1Vec si ^4%s", CLASSES_T[i])
        }
 
        menu_destroy(menu)
        ColorChat ( id, GREEN, "[Avatar Mod] ^1Zatvaram menu" )
    }
    return PLUGIN_CONTINUE
}
 
 
public client_connect ( id )
{
    if ( get_pcvar_num ( SaveExpirience ) == 1 )
    {
        LoadData ( id )
    }
}
 
public client_disconnect ( id ) 
{
    if ( get_pcvar_num ( SaveExpirience ) == 1 )
    {
        SaveData ( id )
    }
 
    PlayerXP[id] = 0
    PlayerLevel[id] = 0
    PlayerClassCT[id] = 0
    PlayerClassT[id] = 0
}
 
public SaveData ( id )  
{
    new AuthID[35]
    get_user_authid ( id, AuthID, 34 )
 
    new vaultkey[64], vaultdata[256]
    format ( vaultkey, 63, "%s-Mod", AuthID )
    format ( vaultdata, 255, "%i#%i#", PlayerXP[id], PlayerLevel[id] )
    nvault_set ( g_Vault, vaultkey, vaultdata )
    return PLUGIN_CONTINUE
}
 
public LoadData ( id ) 
{
    new AuthID[35]
    get_user_authid ( id, AuthID, 34 )
 
    new vaultkey[64], vaultdata[256]
    format ( vaultkey, 63, "%s-Mod", AuthID )
    format ( vaultdata, 255, "%i#%i#", PlayerXP[id], PlayerLevel[id] )
    nvault_get ( g_Vault, vaultkey, vaultdata,255 )
 
    replace_all ( vaultdata, 255, "#", " " )
 
    new playerxp[32], playerlevel[32];
 
    parse ( vaultdata, playerxp, 31, playerlevel, 31 )
 
    PlayerXP[id] = str_to_num ( playerxp )
    PlayerLevel[id] = str_to_num ( playerlevel )
 
    return PLUGIN_CONTINUE
}
 
public BeginningCT ( id ) /*Sta se desava kad se spawnuje Avatar*/
{
    if ( cs_get_user_team ( id ) == CS_TEAM_CT )
    {
 
        if ( !is_user_alive(id) || !is_user_connected ( id ) )
        {
            return PLUGIN_CONTINUE
        }
 
        if ( !PlayerClassCT[id] )
        {
            ChangeClassCT ( id )
        }
 
        if ( PlayerClassCT[id] == 0 ) /*None*/
        {
            strip_user_weapons ( id )
            cs_set_user_model ( id, "avatar" )
        }
 
        if ( PlayerClassCT[id] == 1 ) /*Brz Avatar*/
        {
            strip_user_weapons ( id )
            set_user_health ( id, 2200 )
            give_item ( id, "weapon_knife" )
            cs_set_user_model ( id, "avatar" )
        }
 
        if( PlayerClassCT[id] == 2 ) /*Nevidljiv Avatar*/
        {
            strip_user_weapons ( id )
            set_user_health ( id, 1600 )
            give_item ( id, "weapon_knife" )
            cs_set_user_model ( id, "avatar" )
            set_user_rendering ( id, kRenderFxGlowShell, 0, 0, 0, kRenderTransColor, 70 )
        }
    }
    return PLUGIN_CONTINUE
}
 
public BeginningT ( id ) /*Sta se desava kad se spawnuje Vojnik*/
{
    new CsTeams:team = cs_get_user_team ( id )
    if ( team == CS_TEAM_T )
    {
        if ( !is_user_alive(id) || !is_user_connected ( id ) )
        {
            return PLUGIN_CONTINUE
        }
 
        if ( !PlayerClassT[id] )
        {
            ChangeClassT ( id )
        }
 
        if ( PlayerClassT[id] == 0 )
        {
            strip_user_weapons ( id )
            cs_set_user_model ( id, "marine" )
        }
        if ( PlayerClassT[id] == 1 ) /*Marinac*/
        {
            strip_user_weapons ( id )
            give_item ( id, "weapon_deagle" )
            cs_set_user_bpammo ( id, CSW_DEAGLE, 93 )
            cs_set_user_model ( id, "marine" )
        }
 
        if( PlayerClassT[id] == 2 ) /*Komandant*/
        {
            strip_user_weapons ( id )
            give_item ( id, "weapon_m4a1" )
            give_item ( id, "weapon_ak47" )
            cs_set_user_bpammo ( id, CSW_M4A1, 120 )
            cs_set_user_bpammo ( id, CSW_AK47, 120 )
            cs_set_user_model ( id, "commander" )
        }
    }
    return PLUGIN_CONTINUE
}
 
 
 
public CurWeapon(id)
{
    if(PlayerClassCT[id] == 1)
    {
        if (get_user_weapon(id) == CSW_KNIFE)
        {
            entity_set_string(id, EV_SZ_viewmodel, "models/avatar_mod/v_avatar_knife.mdl")
        }
    }
 
    if(PlayerClassCT[id] == 2)
    {
        if(get_user_weapon(id) == CSW_KNIFE)
        {
            entity_set_string(id, EV_SZ_viewmodel, "models/avatar_mod/v_avatar_knife.mdl")
        }
    }
 
    if(PlayerClassT[id] == 1)
    {
        if(get_user_weapon(id) == CSW_DEAGLE)
        {
            entity_set_string(id, EV_SZ_viewmodel, "models/avatar_mod/v_soldier_deagle.mdl")
            entity_set_string(id, EV_SZ_weaponmodel, "models/avatar_mod/p_soldier_deagle.mdl")
        }
    }
 
    if(PlayerClassT[id] == 2)
    {
        if(get_user_weapon(id) == CSW_M4A1)
        {
            entity_set_string(id, EV_SZ_viewmodel, "models/avatar_mod/v_soldier_m4a1.mdl")
            entity_set_string(id, EV_SZ_weaponmodel, "models/avatar_mod/p_soldier_m4a1.mdl")
        }
        if(get_user_weapon(id) == CSW_AK47)
        {
            entity_set_string(id, EV_SZ_viewmodel, "models/avatar_mod/v_soldier_ak47.mdl")
            entity_set_string(id, EV_SZ_weaponmodel, "models/avatar_mod/p_soldier_ak47.mdl")
        }
    }
}
 
public message_TextMsg(const MsgId, const MsgDest, const MsgEntity)
{
    static message[32]
    get_msg_arg_string(2, message, charsmax(message))
 
    if(equal(message, "#Terrorists_Win"))
    {
        set_hudmessage(255, 0, 0, -1.0, 0.30, 0, 6.0, 12.0)
        show_hudmessage(0, "Vijnici su dobili bitku !")
    }
    else if(equal(message, "#CTs_Win"))
    {
        set_hudmessage(0, 170, 255, -1.0, 0.30, 0, 6.0, 12.0)
        show_hudmessage(0, "Avatari su dobili bitku !")
    }
}
 
public msgStatusIcon(msgid, msgdest, id)
{
    static szIcon[8]
    get_msg_arg_string(2, szIcon, 7)
 
    if(equal(szIcon, "buyzone") && get_msg_arg_int(1))
    {
        set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0))
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}
 
public ThirdPersonView(id)
{
    if(cs_get_user_team(id) == CS_TEAM_CT)
    {
        set_view(id, CAMERA_3RDPERSON)
    }
}
 
public FirstPersonView(id)
{
    if(cs_get_user_team(id) == CS_TEAM_CT)
    {
        set_view(id,CAMERA_NONE)
    }
}
 
public Help()
{
    switch(random(7))
    {
        case 0: ColorChat(0, GREEN, "[Avatar Mod] ^1Da vidis stats, ^3say: /xp")
            case 1: ColorChat(0, GREEN, "[Avatar Mod] ^1Da promenis klasu ^3say: /classct ^1ili ^3say: /classt")
            case 2: ColorChat(0, GREEN, "[Avatar Mod] ^1Da otvorite Avatar Shop ^3say: /shop")
        }
    set_task(36.0, "Help")
}
 
public round_start()
{
    drop_locked = true
}
 
public drop(id)
{
    if (drop_locked)
    { 
        client_print(id, print_center, "Nemozes da bacas oruzija !")
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}
You mean that avatar where is blue guys xD ?
I've seen both of them.
.Dare Devil. is offline
fireattack
Senior Member
Join Date: Jul 2008
Old 07-29-2011 , 08:55   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #6

PHP Code:
case 1
        {
            if ( 
cs_get_user_money id ) < 500 
            {
                
ColorChat (idGREEN"[Shop] ^1You don't have enough money :(" )
                return 
PLUGIN_CONTINUE
            
}
            
cs_set_user_money idcs_get_user_money id ) - 500 )
            
PlayerXP[id] += 300
            ColorChat 
idGREEN"[Shop] ^1You bought Experience :)" )
            
eDeath()

Why do you call eDeath?
fireattack is offline
Krle
Senior Member
Join Date: Jul 2011
Location: Serbia, Nis
Old 07-29-2011 , 19:13   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #7

@fireattack i already fixed it, the bug was that the Cost of item was 1500, and i set -10000 xD
PHP Code:
if(cs_get_user_money(id) < 1500)
{
     return 
PLUGIN_CONTINUE
}
cs_set_user_money(idget_user_money(id) - 10000)
eDeath 
That was the BUG, so i FIX it
I call eDeath because of Leveling... So is that bad, do i need to remove it?

@.Dare Devil. Ye it's with that blue guys...

Can you make it that, When player Choose class he automatically get it, he don't need to wait another round, and the message in HUD stays forever and refreshes every second :S

Last edited by Krle; 07-29-2011 at 21:57.
Krle is offline
Send a message via MSN to Krle
fireattack
Senior Member
Join Date: Jul 2008
Old 07-31-2011 , 16:07   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #8

Quote:
Originally Posted by Krle View Post
@fireattack i already fixed it, the bug was that the Cost of item was 1500, and i set -10000 xD
PHP Code:
if(cs_get_user_money(id) < 1500)
{
     return 
PLUGIN_CONTINUE
}
cs_set_user_money(idget_user_money(id) - 10000)
eDeath 
That was the BUG, so i FIX it
I call eDeath because of Leveling... So is that bad, do i need to remove it?

@.Dare Devil. Ye it's with that blue guys...

Can you make it that, When player Choose class he automatically get it, he don't need to wait another round, and the message in HUD stays forever and refreshes every second :S
Yes, you have to remove it, or just make another public with the while.

- Use a infinite task.
- Put the "BeginningCT" on menu cases too, so players doesn't need to spawn to get the weapons.
fireattack is offline
Old 07-30-2011, 18:42
Krle
This message has been deleted by Exolent[jNr]. Reason: Don't bump until 2 weeks have passed since last post.
Krle
Senior Member
Join Date: Jul 2011
Location: Serbia, Nis
Old 07-31-2011 , 16:53   Re: NEW! Avatar Mod [ CS 1.6 ] I need some help :S
Reply With Quote #10

Im not sure i really understand you... Can you explain me more, because im new to pawn... Thanks
__________________

Sorry about my BAD English
Krle is offline
Send a message via MSN to Krle
Reply



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 01:10.


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