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

[ANY] Saysounds (Redux)


Post New Thread Reply   
 
Thread Tools Display Modes
Lannister
Veteran Member
Join Date: Apr 2015
Old 05-03-2019 , 16:48   Re: [ANY] Saysounds (Redux)
Reply With Quote #51

Quote:
Originally Posted by HvG Community View Post
You should make it so the sound is played in the radius of player so people around can hear aswell with EmitSoundToAll or AmbientSound.
Im going to do it eventually if nobody sets it up. But this is how its suppose to be. Makes most sense.
Have you made this? i'm looking for this too, seems kind of weird that you hear a sound played by a person that it's on the other side of the map, it would be amazing to have that only people around that person hear it.

Hopefully someone can make this?
Lannister is offline
NeoxX
AlliedModders Donor
Join Date: Jan 2014
Location: Germany
Old 05-16-2019 , 10:40   Re: [ANY] Saysounds (Redux)
Reply With Quote #52

Quote:
Originally Posted by eliteroyal View Post
where?


https://forums.alliedmods.net/showpo...3&postcount=36
__________________
NeoxX is offline
eliteroyal
AlliedModders Donor
Join Date: Dec 2016
Location: Moldova
Old 07-01-2019 , 03:18   Re: [ANY] Saysounds (Redux)
Reply With Quote #53

i get this:
[Sound] S_StartSound(): Failed to load sound '*misc\saysounds\gatu.mp3'. File is missing from disk or is invalid.

it think it's not reading corectly the path

i have this in saysounds.cfg

"Sound Combinations"
{


"gatu" // Word trigger to randomly select 1 of multiple sounds
{
"file" "misc/saysounds/gatu.mp3"
"admin" "1"
}


}

CSGO SERVER.
__________________
PEACE FROM MOLDOVA

Last edited by eliteroyal; 07-01-2019 at 07:21.
eliteroyal is offline
1024mb
Junior Member
Join Date: Feb 2019
Old 03-26-2020 , 16:12   Re: [ANY] Saysounds (Redux)
Reply With Quote #54

Is this plugin working well with latest version of CSS?
I know Say Sounds isn't working with latests version so I hope this does, can someone confirm please?

Edit: Just tested this and it's working great, thanks!

Last edited by 1024mb; 03-26-2020 at 18:57.
1024mb is offline
eliteroyal
AlliedModders Donor
Join Date: Dec 2016
Location: Moldova
Old 03-28-2020 , 02:59   Re: [ANY] Saysounds (Redux)
Reply With Quote #55

does this version support join sound feature?
also what to edit to show in chat:
X playerd sound (the name of the sound)
__________________
PEACE FROM MOLDOVA

Last edited by eliteroyal; 03-30-2020 at 07:04.
eliteroyal is offline
1024mb
Junior Member
Join Date: Feb 2019
Old 04-15-2020 , 15:15   Re: [ANY] Saysounds (Redux)
Reply With Quote #56

I have two little problems.

No matter how I configure the file "\cstrike\cfg\sourcemod\sm_saysounds.cfg" , players can't use more than 10 sounds and there is delays between played sounds, with the original Saysounds I got it configured to allow whatever numbers of sounds to be played by any player and without any delay but with this plugin I can't. Only if I rcon I can use them without limitations but the other players can't. Anybody has a solution for this?

I have this set:

Spoiler



The other problem is that I have sounds like this:

Spoiler


But when I play "name3" the "name.mp3" file is played, the same if I play name2 and name4.
Even if I have this:

Spoiler


And I play "name" the file "name.mp3" is played, the same if I play name2, 3 and 4, the file "name.mp3" is always played. It seems that the plugin is set to detect the first part of the string that matches any name on saysounds.cfg and not to compare the whole string.

Even if I wrote nameoanoasnapfns (and a lot of more nonsense) the plugin detects name and plays it.
Can this be changed?
1024mb is offline
Sandervraun
Senior Member
Join Date: May 2019
Location: Denmark
Old 05-25-2020 , 01:49   Re: [ANY] Saysounds (Redux)
Reply With Quote #57

Hello. I need help. My server printed this in console, and crashed the server when I connected.. Please help.

Quote:
L 05/25/2020 - 07:44:14: World triggered "Round_Start"
PutClientInServer: no info_player_start on level
Inserted trigger_teleport with no model
L 05/25/2020 - 07:44:14: "Valentino Devincy<10><STEAM_1:0:4745399><>" entered the game
L 05/25/2020 - 07:44:14: Valentino Devincy's credits have changed by 74242. Reason: Amount of credits when the player joined
L 05/25/2020 - 07:44:14: [saysounds.smx] Ivalid flag detected: 9
L 05/25/2020 - 07:44:14: [saysounds.smx] Ivalid flag detected: 9
L 05/25/2020 - 07:44:14: [saysounds.smx] Ivalid flag detected: :
L 05/25/2020 - 07:44:14: [Say Sounds Log] played saysounds/hi.mp3
L 05/25/2020 - 07:44:15: [SM] Exception reported: Native is not bound
L 05/25/2020 - 07:44:15: [SM] Blaming: speclist.smx
L 05/25/2020 - 07:44:15: [SM] Call stack trace:
L 05/25/2020 - 07:44:15: [SM] [0] BfWriteByte
L 05/25/2020 - 07:44:15: [SM] [1] Line 195, speclist.sp::Timer_UpdateHudHint
My Saysounds.cfg
Quote:
// ############################################# ############################################# ########
// ############################## Saysounds example config ##########################################
// ############################################# ############################################# ########
// # Soundfiles have to be placed relative to your game/mod "sound" folder. #
// # Example: cstrike/sound/mysound.mp3 or dod/sound/myfolder/mysound.mp3 #
// # "file" "mysound.mp3" or "file" "myfolder/mysound.mp3" #
// # If you run a pure server (sv_pure = 1) you should create an extra folder for your sounds #
// # so you don't have to whitelist your whole "sound" folder. #
// # Whitelisting is done in the "pure_server_whitelist.txt" file located in the "hl2" folder. #
// # Example: sound\myfolder\... allow_from_disk #
// # Don't forget to change the map after you've added something to your pure_server_whitelist.txt #
// # For more infos on pure servers visit http://developer.valvesoftware.com/wiki/Pure_Servers #
// ############################################# ############################################# ########

"Sound Combinations"
{
// #### Join/Exit Sounds ####
"JoinSound" // Sound to play when a player Joins the server
{
"file" "saysounds/hi.mp3"
"admin" "0"
"text" "" // Message to display if a client joins the server
"single" "1" // 1 to play sound to single client only, 0 to play to all (default is 1)
"volume" "0.2" // Specify volume for this specific sound
}
"ExitSound"
{
"file" "saysounds/bye.mp3"
"admin" "0"
"etext" "" // Message to display if a client leaves the server
"single" "1" // 1 to play sound to single client only, 0 to play to all (default is 0)
"volume" "0.2" // Specify volume for this specific sound
}
"STEAM_0:0:162897364" // trigger for specific STEAM ID
{
"file" "saysounds/hi.mp3" // name of sound to play when joining
"exit" "saysounds/bye.mp3" // name of sound to play when leaving
"text" "" // Message to display if this client joins the server
"etext" "" // Message to display if this client leaves the server
"admin" "0"
"volume" "0.2" // Specify volume for this specific sound
}
"STEAM_1:0:4745399" // trigger for specific STEAM ID
{
"file" "saysounds/hi.mp3" // name of sound to play when joining
"exit" "saysounds/bye.mp3" // name of sound to play when leaving
"text" "" // Message to display if this client joins the server
"etext" "" // Message to display if this client leaves the server
"admin" "0"
"volume" "0.2" // Specify volume for this specific sound
}
// #### Say Sounds ####
"doh" // Minimum configuration for sounds
{
"file" "misc/doh.wav" // This will set all other options to default values
}
"steam" // Word trigger
{
"file" "saysounds/walleo.mp3" //"file" is always there, next is the filepath (always starts with "sound/")
"admin" "1" // 1 is admin only, 0 is anyone (defaults is 0)
"delay" "5" // will delay the sound by 5 seconds (max delay 60 seconds)
"adult" "1" // will announce the sound as ADULT SOUND, hide it from the sounds menu, block the chat output (defaults is 0)
"text" "" // Message to display for this sound
"download" "1" // 1 to download the sounds, 0 to not download (default is 1)
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"oof" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/oof.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
}
"skid" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/poop1.mp3" // name of the 1st option, can also be "file1"
"file2" "saysounds/poop2.mp3" // name of the 2nd option
"file3" "saysounds/poop3.mp3"
"count" "3" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"Allahhuakbar" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/allahhuakbar1.mp3" // name of the 1st option, can also be "file1"
"file2" "saysounds/allahhuakbar2.mp3" // name of the 2nd option
"file3" "saysounds/allahhuakbar4.mp3"
"file4" "saysounds/allahhuakbar5.mp3"
"file5" "saysounds/allahhuakbar10.mp3"
"file6" "saysounds/allahhuakbar11.mp3"
"file7" "saysounds/allahhuakbar12.mp3"
"file8" "saysounds/allahhuakbar15.mp3"
"file9" "saysounds/allahhuakbar16.mp3"
"file10" "saysounds/allahhuakbar17.mp3"
"file11" "saysounds/allahhuakbar18.mp3"
"file12" "saysounds/allahhuakbar19.mp3"
"file13" "saysounds/allahhuakbar21.mp3"
"count" "13" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
}
"dintellyde" // Word trigger to randomly select 1 of multiple sounds
{
"file" "dintel_bury.wav" // name of the 1st option, can also be "file1"
"file2" "dintel_chicken.wav" // name of the 2nd option
"file3" "dintel_respawn.wav"
"file4" "dintel_football.wav"
"count" "4" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z"
}
// #### KARAOKE ####
"somesong" // Word trigger for Karaoke
{
"file" "misc/somesong.wav"
"karaoke" "somesong.cfg" // name of config file for karaoke lyrics
}
// ####FernFerret####
// ####Action Sounds####
// New Section showing how to use Action Sounds Extention
// New Parameters:
// - actiononly If this variable is set to 1, the sound cannot be
// played by a menu or a client typing
// - action If the action filled in here is performed, the sound will play
// - param The best way to think of param is "Play Sound if [ACTION] with [PARAM]"
// * Some examples are Flag events**, or weapons***
// - prob The probability of a sound playing, if you want a sound to play 20% of the time
// * the fill in prob as ".2" or the percentage divided by 100
// - playto Play kill events to clients/teams
// * attacker - plays the sound to the attacker
// * victim - plays the sound to the victim
// * both - plays the sound to the attacker and the victim
// * ateam - plays the sound to the attacker team
// * vteam - plays the sound to the victim team
// - Some examples:
//
"/rocket" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/rocket.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"countdown" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/Countdown.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"lookatthisdude" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/lookatthisdude.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"ohnonono" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/ohnonono.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"sorrybro" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/sorrybro.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"stoplying" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/stoplying.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"tada" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/tada.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"telefon" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/telefon.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"brb" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/brb.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
}
"hej" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/hej.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
}
"imgay" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/imgay.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"itsonlyagame" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/itsonlyagame.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
}
"kylling" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/kylling.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
}
"letsgo" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/letsgo.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
}
"nej" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/no.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
}
"pacman" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/pacman.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"prut" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/prut.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"pussy" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/pussy.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
}
"rakaka" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/rakaka.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"sadallahhuakbar" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/sadallahhuakbar.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"samfundstaber" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/samfundstaber.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"scare" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/scare1.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"scarescream" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/scare2.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"uhoh" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/uhoh.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"yallah" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/yallah.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"yallah2" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/yallah2.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
"flags" "s" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"ja" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/ja.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.2" // Specify volume for this specific sound
}
"panjabi" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/panjabi.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.3" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"uha" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/uha.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "1.0" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"smasker" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/smasker.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "1.0" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}
"sadviolin" // Word trigger to randomly select 1 of multiple sounds
{
"file" "saysounds/sadviolin.mp3" // name of the 1st option, can also be "file1"
"count" "1" // number of sounds (default is 1)
"volume" "0.1" // Specify volume for this specific sound
"flags" "z" // only clients with either the "a" or the "o" flag will be able to play that sound
}

}
Sandervraun is offline
The Solid lad
Senior Member
Join Date: Oct 2018
Old 01-12-2021 , 08:40   Re: [ANY] Saysounds (Redux)
Reply With Quote #58

The plugin works, but it makes clients re-download each saysound every time they join the server.

Also, just like saysoundsHE, this plugin ignores volume settings for sounds... it always plays them at max volume.

Any fix for these problems?

Running a CS:GO server on linux.
__________________

Last edited by The Solid lad; 06-05-2021 at 09:25.
The Solid lad is offline
PC Gamer
Veteran Member
Join Date: Mar 2014
Old 06-07-2021 , 01:35   Re: [ANY] Saysounds (Redux)
Reply With Quote #59

Quote:
Originally Posted by The Solid lad View Post
Also, just like saysoundsHE, this plugin ignores volume settings for sounds... it always plays them at max volume.
Volume works on my TF2 Server once I figured it out. This is what I learned. It may help you...

1. Sound volume can never be softer than the original sound volume. If you have a sound and need it to be quieter consider using an online app to change the volume to something quieter before putting it on your server.

2. The volume setting of this plugin works with whole numbers. The default volume is "1". That means the sound will be played at the original volume. It cannot go lower than 1. The next higher number is "2". The next higher number after that is "3". I don't think it works above volume "3". You shouldn't need any sound to go more than 3. If you do then you should probably use the same process above with an online app to make the sound louder before putting it on your server.

3. The volume number denotes the number of times the sound will be played on the server simultaneously. If you have a volume of "2" the server will play two instances of the same sound at the same time. This has the effect of making the sound much louder. A volume of "3" will play three instances of the same sound at the same time.

I hope this helps...
PC Gamer is offline
The Solid lad
Senior Member
Join Date: Oct 2018
Old 06-07-2021 , 21:46   Re: [ANY] Saysounds (Redux)
Reply With Quote #60

Quote:
Originally Posted by PC Gamer View Post
Volume works on my TF2 Server once I figured it out. This is what I learned. It may help you...

1. Sound volume can never be softer than the original sound volume. If you have a sound and need it to be quieter consider using an online app to change the volume to something quieter before putting it on your server.

2. The volume setting of this plugin works with whole numbers. The default volume is "1". That means the sound will be played at the original volume. It cannot go lower than 1. The next higher number is "2". The next higher number after that is "3". I don't think it works above volume "3". You shouldn't need any sound to go more than 3. If you do then you should probably use the same process above with an online app to make the sound louder before putting it on your server.

3. The volume number denotes the number of times the sound will be played on the server simultaneously. If you have a volume of "2" the server will play two instances of the same sound at the same time. This has the effect of making the sound much louder. A volume of "3" will play three instances of the same sound at the same time.

I hope this helps...
Thank you very much for the reply!

I see.
I mistakenly assumed that this plugin also enables you to lower the volume of a sound.
...Like saysoundsHE did on my CS:S server, but now refuses to on my CS:GO one.

Since I have many (150+) sounds on my server, re-encoding them with a different volume and putting them back on the server with a new filename (so that clients re-download and use the volume corrected one) is undesirable.

Hopefully I'll manage to get saysoundsHE's volume adjustment function working on CS:GO someday.
__________________
The Solid lad 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 19:30.


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