Board index Programs with AI or Rules Enforcement Magic: The Gathering - Duels of the Planeswalkers Programming Talk
if anybody want it... here all about mana tokens 2013
Moderator: CCGHQ Admins
if anybody want it... here all about mana tokens 2013
by nabeshin » 25 Jul 2012, 22:55
function, token cards, Izzet Signet as working example, func file contains also nice scry code, i add card with it - Foresee
- Attachments
-
- update.rar
- (216.34 KiB) Downloaded 497 times
Re: if anybody want it... here all about mana tokens 2013
by Tyrany » 26 Jul 2012, 14:48
i was tryin to implement the gemhide sliver and everything works on choosing the target color
but then nothing works is the manapool implemented?
this is the used code for the function
but then nothing works is the manapool implemented?
this is the used code for the function
- Code: Select all
<PLAY_TIME_ACTION>
Object():GetPlayer():ChooseColour( "CARD_QUERY_CHOOSE_COLOUR", 1 )
</PLAY_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local LNG_COLOUR = Object():GetPlayer():GetChosenColour()
if (LNG_COLOUR == 4) then
ProduceMana( "U", 1 )
end
if (LNG_COLOUR == 3) then
ProduceMana( "B", 1 )
end
if (LNG_COLOUR == 1) then
ProduceMana( "R", 1 )
end
if (LNG_COLOUR == 2) then
ProduceMana( "G", 1 )
end
if (LNG_COLOUR == 5) then
ProduceMana( "W", 1 )
end
</RESOLUTION_TIME_ACTION>
Re: if anybody want it... here all about mana tokens 2013
by Aiodren » 26 Jul 2012, 16:47
Your problem is not the mana functions but the colour choice. In 2013 ChooseColour doesn't return numbers but the actual colours (COLOUR_RED,COLOUR_BLUE,...). You could use the following example to code it:
- Code: Select all
<PLAY_TIME_ACTION>
EffectController():ChooseColour( "CARD_QUERY_CHOOSE_COLOUR", 1 )
</PLAY_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local LNG_COLOUR = GetChosenColour()
if (LNG_COLOUR == COLOUR_RED) then
ProduceMana( "R", 1 )
end
if (LNG_COLOUR == COLOUR_GREEN) then
ProduceMana( "G", 1 )
end
if (LNG_COLOUR == COLOUR_BLACK) then
ProduceMana( "B", 1 )
end
if (LNG_COLOUR == COLOUR_BLUE) then
ProduceMana( "U", 1 )
end
if (LNG_COLOUR == COLOUR_WHITE) then
ProduceMana( "W", 1 )
end
</RESOLUTION_TIME_ACTION>
Re: if anybody want it... here all about mana tokens 2013
by RiiakShiNal » 26 Jul 2012, 17:17
Well, that's not entirely true, he did have the numbers wrong, but GetChosenColour() does return numbers (which relate to the colour constants as follows):Aiodren wrote:Your problem is not the mana functions but the colour choice. In 2013 ChooseColour doesn't return numbers but the actual colours (COLOUR_RED,COLOUR_BLUE,...). You could use the following example to code it:
- COLOUR_WHITE = 1
- COLOUR_BLUE = 2
- COLOUR_BLACK = 3
- COLOUR_RED = 4
- COLOUR_GREEN = 5
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2185
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: if anybody want it... here all about mana tokens 2013
by Aiodren » 26 Jul 2012, 22:03
@Riiak: Are you sure? First i had the same code as Tyrany and it didn't work at all, so i assumed after seeing the code of fireminds Apostle's Blessing that the function now doesn't return numbers anymore.
Re: if anybody want it... here all about mana tokens 2013
by RiiakShiNal » 26 Jul 2012, 22:21
Yes, I'm sure if you look at the decoded lol files the COLOUR_ constants are defined there (that's where I pulled the list from in my previous post). The chosen colour can be stored using either Int_Set() or Set_Int() and later retrieved using Int_Get() or Get_Int() (I actually depend on this to work for Voice of All).Aiodren wrote:@Riiak: Are you sure? First i had the same code as Tyrany and it didn't work at all, so i assumed after seeing the code of fireminds Apostle's Blessing that the function now doesn't return numbers anymore.
Just getting started: Xander9009's DotP 2014 Community Wad
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
Need a deck builder: DotP 2014 Deck Builder
Problems Modding: DotP 2014 Frequent Modding Mistakes
- RiiakShiNal
- Programmer
- Posts: 2185
- Joined: 16 May 2011, 21:37
- Has thanked: 75 times
- Been thanked: 497 times
Re: if anybody want it... here all about mana tokens 2013
by thefiremind » 26 Jul 2012, 23:20
The fact is that COLOUR_WHITE, COLOUR_BLUE, etc. are numbers, because each of them is a constant whose value is a number. So it doesn't matter if you use the constant or the number: the constants exist because it's faster to write COLOUR_BLUE instead of having to check what number stands for blue (and you can adjust the value, if needed, only on the constant declaration, rather than everywhere you used that value). If you look at my Silhana Starfletcher, I use the numbers to select which mana ability he should grant to himself.Aiodren wrote:@Riiak: Are you sure? First i had the same code as Tyrany and it didn't work at all, so i assumed after seeing the code of fireminds Apostle's Blessing that the function now doesn't return numbers anymore.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 721 times
Re: if anybody want it... here all about mana tokens 2013
by Persee » 29 Jul 2012, 23:45
Thx for the job nabeshin.
Re: if anybody want it... here all about mana tokens 2013
by nabeshin » 30 Jul 2012, 21:38
it is adaptation from 2012, collaboration, it is not necessary to thank. (modesty: default - on)Persee wrote:Thx for the job nabeshin.
Re: if anybody want it... here all about mana tokens 2013
by alexandreonly » 04 Aug 2012, 15:55
I'm having problems with dark ritual.
- Code: Select all
<?xml version='1.0'?>
<CARD_V2>
<FILENAME text="DARK_RITUAL_3285" />
<CARDNAME text="DARK_RITUAL" />
<TITLE>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Dark Ritual]]></LOCALISED_TEXT>
</TITLE>
<MULTIVERSEID value="3285" />
<ARTID value="3285" />
<ARTIST name="John Coulthart" />
<CASTING_COST cost="{B}" />
<FLAVOURTEXT>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[“The ceremony ended with a voice from the shadows, a voice with vast, ominous power.”
—Kifimbo, Shadow Guildmage]]></LOCALISED_TEXT>
</FLAVOURTEXT>
<TYPE metaname="Instant" />
<EXPANSION value="DPG" />
<RARITY metaname="C" />
<SPELL_ABILITY>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Add {B}{B}{B} to your mana pool.]]></LOCALISED_TEXT>
<RESOLUTION_TIME_ACTION>
ProduceMana( "B", 3 )
</RESOLUTION_TIME_ACTION>
</SPELL_ABILITY>
</CARD_V2>
- alexandreonly
- Posts: 145
- Joined: 04 Jul 2011, 17:27
- Has thanked: 0 time
- Been thanked: 8 times
Re: if anybody want it... here all about mana tokens 2013
by BlindWillow » 04 Aug 2012, 21:10
You need to register the black mana tokens.alexandreonly wrote:I'm having problems with dark ritual.
- Code: Select all
<TOKEN_REGISTRATION reservation="1" type="MANATOKEN_B"/>
- BlindWillow
- Posts: 213
- Joined: 19 Jul 2012, 00:26
- Has thanked: 11 times
- Been thanked: 46 times
Re: if anybody want it... here all about mana tokens 2013
by alexandreonly » 05 Aug 2012, 01:40
I did it now, but dark ritual still go to graveyard without producing mana.BlindWillow wrote:You need to register the black mana tokens.alexandreonly wrote:I'm having problems with dark ritual.
- Code: Select all
<TOKEN_REGISTRATION reservation="1" type="MANATOKEN_B"/>
- alexandreonly
- Posts: 145
- Joined: 04 Jul 2011, 17:27
- Has thanked: 0 time
- Been thanked: 8 times
Re: if anybody want it... here all about mana tokens 2013
by BlindWillow » 06 Aug 2012, 04:37
I tested it, and it worked for me. Make sure you have all of the mana token cards in the "CARDS" folder (there should be six), 01_FUNC.lol in the "FUNCTIONS" folder (which you have to create, if you haven't already), and 88888888.tdx in the ART_ASSETS/ILLUSTRATIONS folder.alexandreonly wrote:I did it now, but dark ritual still go to graveyard without producing mana.
- BlindWillow
- Posts: 213
- Joined: 19 Jul 2012, 00:26
- Has thanked: 11 times
- Been thanked: 46 times
Re: if anybody want it... here all about mana tokens 2013
by thefiremind » 28 Feb 2013, 13:39
Here is something that you probably would never expected, but... I coded my own mana tokens! My aim is to make a storm deck and I need Pyretic Ritual and similar cards to achieve that. Since those mana-producing spells aren't mana abilities, they are free from the incompatibilities that always keep me away from mana tokens.
While I know that nabeshin's version works perfectly already, I wanted to code my own because I needed to experiment something and it's easier when I know and understand 100% of the involved code. The results of my experiment were good: I invented a way to nullify the interaction between token-duplicating cards (Doubling Season, Parallel Lives, etc.) and mana tokens (or any kind of invisibile token that you don't want to be replicated), without the need to edit the token-duplicating cards! The idea is simple: pass a chest to the token-creating function. Now you have pointers to the created tokens, and you know how many of them you wanted, so you can iterate over the chest and exile the excess tokens!
This is the content of the new LOL file I created:
I made two tests with both me and the AI using a test deck composed by just 15 copies of Pyretic Ritual and 15 copies of Doubling Season. In the first test I had forgot the AI_AVAILABILITY blocks and the AI never used Pyretic Ritual, but after adding them, the AI correctly played 2 Pyretic Ritual to be able to cast Doubling Season!
I attached the involved files so you can try and experiment (and eventually find bugs ).
While I know that nabeshin's version works perfectly already, I wanted to code my own because I needed to experiment something and it's easier when I know and understand 100% of the involved code. The results of my experiment were good: I invented a way to nullify the interaction between token-duplicating cards (Doubling Season, Parallel Lives, etc.) and mana tokens (or any kind of invisibile token that you don't want to be replicated), without the need to edit the token-duplicating cards! The idea is simple: pass a chest to the token-creating function. Now you have pointers to the created tokens, and you know how many of them you wanted, so you can iterate over the chest and exile the excess tokens!
This is the content of the new LOL file I created:
- Code: Select all
CreateManaTokens = function(color, number, chest)
-- creates the selected number of mana tokens of the selected color (it needs a chest for storing tokens and allowing use of the next function)
local color_letter = {"W", "U", "B", "R", "G", "C"}
local fixed_color = color
if color == 0 then
fixed_color = 6
end
local file_name = "_MANA_TOKEN_"..color_letter[fixed_color].."_1999200"..fixed_color
MTG():PutTokensIntoPlay( file_name, number, EffectController(), chest )
end
RemoveRedundantTokens = function(number, chest)
-- removes tokens beyond number from chest (against effects like Doubling Season)
if chest ~= nil then
local i = number
local token = chest:Get_NthCardPtr(i)
while token ~= nil do
token:RemoveFromGame()
i = i+1
token = chest:Get_NthCardPtr(i)
end
end
end
CheckManaPool = function()
-- gives a message that displays the available mana tokens
local player = EffectController()
if player:IsAI() == 0 then
local color_letter = {"W", "U", "B", "R", "G"}
local message = ""
local filter = Object():GetFilter()
filter:Clear()
filter:SetZone(ZONE_IN_PLAY)
filter:SetController(player)
filter:AddCardName("_MANA_TOKEN_C")
filter:NotTargetted()
local count = filter:Count()
if count > 0 then
message = "{"..count.."}"
end
for i=1,5 do
filter:Clear()
filter:SetZone(ZONE_IN_PLAY)
filter:SetController(player)
filter:AddCardName("_MANA_TOKEN_"..color_letter[i])
filter:NotTargetted()
count = filter:Count()
if count > 0 then
for j=1,count do
message = message.."{"..color_letter[i].."}"
end
end
end
player:DisplayMessage(" mana pool: \]\n\n\["..message)
end
end
- Code: Select all
<?xml version='1.0'?>
<CARD_V2>
<FILENAME text="PYRETIC_RITUAL_205067" />
<CARDNAME text="PYRETIC_RITUAL" />
<TITLE>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Pyretic Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Rituale Febbrile]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Pyretisches Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Rituel pyrétique]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Ritual febril]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[発熱の儀式]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Pyretic Ritual]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Пирогенный Ритуал]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Ritual Pirético]]></LOCALISED_TEXT>
</TITLE>
<MULTIVERSEID value="205067" />
<ARTID value="A205067" />
<ARTIST name="James Paick" />
<CASTING_COST cost="{1}{R}" />
<FLAVOURTEXT>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[The Multiverse is filled with limitless power just waiting for someone to reach out and seize it.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Il Multiverso è pieno di potere illimitato in attesa di qualcuno che allunghi la mano per coglierlo.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Das Multiversum steckt voll mit unendlicher Kraft, die nur darauf wartet, dass jemand nach ihr greift und sie nutzt.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Le Multivers contient une puissance illimitée qui n’attend que celui qui s’en emparera.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[El Multiverso está lleno de poder infinito esperando a ser alcanzado y aprovechado.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[多元宇宙は、誰かが手を伸ばして捕まえるのを待ち続ける無限の力に満ちている。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[The Multiverse is filled with limitless power just waiting for someone to reach out and seize it.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Мультивселенная наполнена безграничной силой — осталось лишь сделать усилие и заполучить ее.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[O multiverso está repleto de poder ilimitado aguardando por alguém que estenda a mão e o capture.]]></LOCALISED_TEXT>
</FLAVOURTEXT>
<TYPE metaname="Instant" />
<EXPANSION value="M11" />
<RARITY metaname="C" />
<SPELL_ABILITY>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Add {R}{R}{R} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Aggiungi {R}{R}{R} alla tua riserva di mana.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Erhöhe deinen Manavorrat um {R}{R}{R}.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Ajoutez {R}{R}{R} à votre réserve.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Agrega {R}{R}{R} a tu reserva de maná.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[あなたのマナ・プールに{R}{R}{R}を加える。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{R}{R}{R}를 당신의 마나풀에 담는다.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Добавьте {R}{R}{R} в ваше хранилище маны.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Adicione {R}{R}{R} à sua reserva de mana.]]></LOCALISED_TEXT>
<RESOLUTION_TIME_ACTION>
CreateManaTokens( COLOUR_RED, 3, EffectDC():Make_Chest(1) )
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
RemoveRedundantTokens( 3, EffectDC():Get_Chest(1) )
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
CheckManaPool()
</RESOLUTION_TIME_ACTION>
</SPELL_ABILITY>
<AI_AVAILABILITY type="in_response" />
<AI_AVAILABILITY step="main_1" turn="my_turn" />
<AI_AVAILABILITY step="main_2" turn="my_turn" />
<TOKEN_REGISTRATION reservation="1" type="_MANA_TOKEN_R_19992004" />
<AI_BASE_SCORE score="150" zone="ZONE_HAND" />
</CARD_V2>
I made two tests with both me and the AI using a test deck composed by just 15 copies of Pyretic Ritual and 15 copies of Doubling Season. In the first test I had forgot the AI_AVAILABILITY blocks and the AI never used Pyretic Ritual, but after adding them, the AI correctly played 2 Pyretic Ritual to be able to cast Doubling Season!
I attached the involved files so you can try and experiment (and eventually find bugs ).
- Attachments
-
- thefiremind's mana tokens.zip
- Mana tokens + Pyretic Ritual
- (106.43 KiB) Downloaded 319 times
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 721 times
Re: if anybody want it... here all about mana tokens 2013
by NEMESiS » 28 Feb 2013, 18:55
I was also pondering about making a storm deck, possibly make cifka's deck that I compiled here:
http://www.mtgdeckbuilder.net/Decks/EditDeck/446523
Are you making a dragon storm deck?
http://www.mtgdeckbuilder.net/Decks/EditDeck/446523
Are you making a dragon storm deck?
-
NEMESiS - Posts: 460
- Joined: 03 Jan 2013, 04:02
- Location: Pools of Becoming
- Has thanked: 70 times
- Been thanked: 21 times
17 posts
• Page 1 of 2 • 1, 2
Who is online
Users browsing this forum: No registered users and 42 guests