It is currently 23 May 2025, 18:03
   
Text Size

Bug Reports (snapshot builds)

Post MTG Forge Related Programming Questions Here

Moderators: timmermac, Blacksmith, KrazyTheFox, Agetian, friarsol, CCGHQ Admins

Re: Bug Reports (snapshot builds)

Postby friarsol » 07 Apr 2013, 13:39

Crash when activating second ability of Molten Hydra. It had two counters on it at the time.

Molten Hydra | Open
java.lang.NullPointerException
at forge.card.cost.CostRemoveCounter.payHuman(CostRemoveCounter.java:390)
at forge.card.cost.CostPayment.payCost(CostPayment.java:111)
at forge.card.spellability.HumanPlaySpellAbility.fillRequirements(HumanPlaySpellAbility.java:97)
at forge.game.player.HumanPlayer.playSpellAbility(HumanPlayer.java:142)
at forge.game.player.HumanPlayer.playSpellAbility(HumanPlayer.java:82)
at forge.control.input.InputPassPriority$1.run(InputPassPriority.java:89)
at forge.FThreads$1.run(FThreads.java:113)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


Edit: I tried fixing this by assigning maxCounters up at the top, and then comparing to this new "cntCounters" variable, which prevented the crash, but then it dealt 0 damage. So I'm just gonna leave it alone.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Bug Reports (snapshot builds)

Postby Hellfish » 07 Apr 2013, 14:18

Description: Clicked "Great!" after winning a quest match. No clue what I did different than the 20 other games I've played today. :/
EDIT: My winnings and stats *were* saved,though.
UncheckedExecutionException | Open
Code: Select all
Forge Version:    SVN
Operating System: Windows 7 6.1 x86
Java Version:     1.7.0_17 Oracle Corporation

com.google.common.util.concurrent.UncheckedExecutionException: java.awt.color.CMMException: Invalid image format
   at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2258)
   at com.google.common.cache.LocalCache.get(LocalCache.java:3990)
   at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3994)
   at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4878)
   at forge.ImageCache.getImage(ImageCache.java:201)
   at forge.ImageCache.scaleImage(ImageCache.java:152)
   at forge.ImageCache.getIcon(ImageCache.java:131)
   at forge.gui.home.quest.PnlEvent.<init>(PnlEvent.java:53)
   at forge.gui.home.quest.CSubmenuDuels.update(CSubmenuDuels.java:119)
   at forge.gui.match.QuestWinLose.actionOnQuit(QuestWinLose.java:298)
   at forge.gui.match.ControlWinLose$3.actionPerformed(ControlWinLose.java:63)
   at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
   at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
   at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
   at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
   at java.awt.Component.processMouseEvent(Unknown Source)
   at javax.swing.JComponent.processMouseEvent(Unknown Source)
   at java.awt.Component.processEvent(Unknown Source)
   at java.awt.Container.processEvent(Unknown Source)
   at java.awt.Component.dispatchEventImpl(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
   at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
   at java.awt.Container.dispatchEventImpl(Unknown Source)
   at java.awt.Window.dispatchEventImpl(Unknown Source)
   at java.awt.Component.dispatchEvent(Unknown Source)
   at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
   at java.awt.EventQueue.access$200(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.awt.EventQueue$3.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
   at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.awt.EventQueue$4.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
   at java.awt.EventQueue.dispatchEvent(Unknown Source)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
   at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.awt.color.CMMException: Invalid image format
   at sun.java2d.cmm.kcms.CMM.checkStatus(Unknown Source)
   at sun.java2d.cmm.kcms.CMM.createTransform(Unknown Source)
   at java.awt.image.ColorConvertOp.filter(Unknown Source)
   at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(Unknown Source)
   at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
   at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(Unknown Source)
   at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(Unknown Source)
   at javax.imageio.ImageIO.read(Unknown Source)
   at javax.imageio.ImageIO.read(Unknown Source)
   at forge.ImageLoader._findFile(ImageLoader.java:88)
   at forge.ImageLoader.load(ImageLoader.java:52)
   at forge.ImageLoader.load(ImageLoader.java:1)
   at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3589)
   at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2374)
   at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2337)
   at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2252)
   ... 47 more
So now you're
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
User avatar
Hellfish
Programmer
 
Posts: 1297
Joined: 07 Jun 2009, 10:41
Location: South of the Pumphouse
Has thanked: 110 times
Been thanked: 169 times

Re: Bug Reports (snapshot builds)

Postby Hellfish » 07 Apr 2013, 14:37

moomarc wrote:Crash directly after muligan (AI going first). I assume it was trying to reveal Chancellor of the Dross, but other cards in his hand include Woebearer, Soul Shred, Straw Golem and basic lands.

NullPointerException | Open
Code: Select all
Forge Version:    SVN
Operating System: Windows 7 6.1 x86
Java Version:     1.6.0_35 Sun Microsystems Inc.

java.lang.NullPointerException
   at forge.card.mana.ManaCostBeingPaid.applySpellCostChange(ManaCostBeingPaid.java:708)
   at forge.game.ai.ComputerUtilMana.calculateManaCost(ComputerUtilMana.java:418)
   at forge.game.ai.ComputerUtilMana.payManaCost(ComputerUtilMana.java:60)
   at forge.game.ai.ComputerUtilCost.canPayCost(ComputerUtilCost.java:356)
   at forge.card.ability.SpellAbilityAi.doTriggerAI(SpellAbilityAi.java:26)
   at forge.card.ability.AbilityApiBased.doTrigger(AbilityApiBased.java:72)
   at forge.game.GameAction.handleLeylinesAndChancellors(GameAction.java:1449)
   at forge.game.MatchController.afterMulligans(MatchController.java:347)
   at forge.control.input.InputMulligan$1.run(InputMulligan.java:126)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)
Fixed,thanks!
So now you're
Screaming for the blood of the cookie monster
Evil puppet demon of obesity
Time to change the tune of his fearful ballad
C is for "Lettuce," that's good enough for me
User avatar
Hellfish
Programmer
 
Posts: 1297
Joined: 07 Jun 2009, 10:41
Location: South of the Pumphouse
Has thanked: 110 times
Been thanked: 169 times

Re: Bug Reports (snapshot builds)

Postby Leviathan » 07 Apr 2013, 15:40

When I start a game, the background loads, but not any of the tabs. I get one or two null pointer exceptions, depending on the type of game I try to start (have tried Constructed, Quest, and Vanguard). For example, starting a Constructed game gives the following two exceptions:
| Open
java.lang.NullPointerException
at forge.gui.framework.SDisplayUtil$2.run(SDisplayUtil.java:97)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
| Open
java.lang.NullPointerException
at forge.gui.match.views.VPlayers.updatePlayerLabels(VPlayers.java:148)
at forge.gui.match.controllers.CPlayers.update(CPlayers.java:40)
at forge.gui.match.nonsingleton.VField.updateDetails(VField.java:346)
at forge.gui.match.nonsingleton.CField$16.update(CField.java:140)
at java.util.Observable.notifyObservers(Unknown Source)
at java.util.Observable.notifyObservers(Unknown Source)
at forge.util.MyObservable.updateObservers(MyObservable.java:38)
at forge.game.GameNew.newGame(GameNew.java:155)
at forge.game.MatchController.startRound(MatchController.java:182)
at forge.gui.home.sanctioned.CSubmenuConstructed$7.doInBackground(CSubmenuConstructed.java:128)
at javax.swing.SwingWorker$1.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at javax.swing.SwingWorker.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Starting a quest duel gives this exception:
| Open
java.lang.NullPointerException
at forge.gui.framework.SDisplayUtil$2.run(SDisplayUtil.java:97)
at forge.FThreads.invokeInEdtNowOrLater(FThreads.java:68)
at forge.gui.framework.SDisplayUtil.showTab(SDisplayUtil.java:104)
at forge.game.MatchController.startRound(MatchController.java:169)
at forge.gui.home.quest.SSubmenuQuestUtil.startGame(SSubmenuQuestUtil.java:426)
at forge.gui.home.quest.CSubmenuDuels$7.actionPerformed(CSubmenuDuels.java:60)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

I've poked around and it looks like the tabs aren't being set up correctly. Each crash happens when a tab tries to call getParentCell. This first occurred after I updated to revision 20855 (but I was able to play a few games before it started crashing), and continues as of revision 20874, which generated the stack traces above.
Leviathan
 
Posts: 4
Joined: 29 May 2012, 03:30
Has thanked: 0 time
Been thanked: 0 time

Re: Bug Reports (snapshot builds)

Postby Max mtg » 07 Apr 2013, 23:49

friarsol wrote:Crash when activating second ability of Molten Hydra. It had two counters on it at the time.

Edit: I tried fixing this by assigning maxCounters up at the top, and then comparing to this new "cntCounters" variable, which prevented the crash, but then it dealt 0 damage. So I'm just gonna leave it alone.
I have written some code to correct this. Yet it has to be tested.
Single class for single responsibility.
Max mtg
Programmer
 
Posts: 1997
Joined: 02 Jul 2011, 14:26
Has thanked: 173 times
Been thanked: 334 times

Re: Bug Reports (snapshot builds)

Postby friarsol » 08 Apr 2013, 02:52

Max mtg wrote:
friarsol wrote:Crash when activating second ability of Molten Hydra. It had two counters on it at the time.

Edit: I tried fixing this by assigning maxCounters up at the top, and then comparing to this new "cntCounters" variable, which prevented the crash, but then it dealt 0 damage. So I'm just gonna leave it alone.
I have written some code to correct this. Yet it has to be tested.
I just tested this. Same issue I reported in my edit. No more crash, but no damage dealt either.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Bug Reports (snapshot builds)

Postby Max mtg » 08 Apr 2013, 06:26

Thank you for testing, Sol! yesterday I was falling asleep at that moment.

Yet it was not a problem of CostRemoveCounter. It was calculateAmount that had some incorrect order of if-elses.


@Leviathan, exceptions happen due to lack of tabs. I have little idea on how UI works - but maybe if you reset match UI preferences to default that helps.
By resetting I mean delete the file C:\Users\<your_username>\AppData\Roaming\Forge\preferences\match.xml in your system.
Last edited by Max mtg on 08 Apr 2013, 12:21, edited 1 time in total.
Single class for single responsibility.
Max mtg
Programmer
 
Posts: 1997
Joined: 02 Jul 2011, 14:26
Has thanked: 173 times
Been thanked: 334 times

Re: Bug Reports (snapshot builds)

Postby friarsol » 08 Apr 2013, 12:14

Max mtg wrote:Thank you for testing, Sol! yesterday I was falling asleep at that moment.

Yet it was not a problem of CostRemoveCounter. It was calculateAmount that had some incorrect order of if-elses.
Yep, I just report 'em as I see them. That makes sense, since it seemed like the value was being set properly.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Bug Reports (snapshot builds)

Postby friarsol » 09 Apr 2013, 14:19

Hey Max,

What's going on with this change? http://svn.slightlymagic.net/websvn/rev ... &rev=20907

You do realize this was added intentionally, since one of the Quest Pets has haste on its own and was part of the balancing of the quest pets.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Bug Reports (snapshot builds)

Postby Max mtg » 09 Apr 2013, 14:39

friarsol wrote:Hey Max,

What's going on with this change? http://svn.slightlymagic.net/websvn/rev ... &rev=20907

You do realize this was added intentionally, since one of the Quest Pets has haste on its own and was part of the balancing of the quest pets.
That comment looked like a complaint that pets have sickness while they should not. It's ok to rollback this change them.

No, Sol, I am stupid and don't realize a thing. And you should express yourself more politelly.


Do you have any active bugs related to concurrency?
Single class for single responsibility.
Max mtg
Programmer
 
Posts: 1997
Joined: 02 Jul 2011, 14:26
Has thanked: 173 times
Been thanked: 334 times

Re: Bug Reports (snapshot builds)

Postby friarsol » 09 Apr 2013, 14:49

Max mtg wrote:That comment looked like a complaint that pets have sickness while they should not. It's ok to rollback them.

No, Sol, I am stupid and don't realize a thing.


Do you have any active bugs related to concurrency?
I wasn't being sarcastic here. Just explaining why it was there, since you may not be familiar with how the quest pets work.

The only issue I have (I'm not sure if it's related to concurrency or something else) was after declaring attackers the Input box doesn't regain focus to just continue through the inputs using space bar.

I believe someone else mentioned this, but do you know if there's a way to hold repainting while tapping all of the attackers, so it doesn't happen one at a time? When you attack with more than 6 or so on my laptop, it really slows things down to tap and redraw each creature in turn, instead of tapping everything and redrawing once.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Bug Reports (snapshot builds)

Postby Max mtg » 09 Apr 2013, 15:46

friarsol wrote:I wasn't being sarcastic here. Just explaining why it was there, since you may not be familiar with how the quest pets work.
The phases like 'do you realize that...?' express some doubt in mental abilities of a person. That's why I don't like this kind of 'explaination'.
You might just have that commit rolled back and write a note here.

friarsol wrote:The only issue I have (I'm not sure if it's related to concurrency or something else) was after declaring attackers the Input box doesn't regain focus to just continue through the inputs using space bar.

I believe someone else mentioned this, but do you know if there's a way to hold repainting while tapping all of the attackers, so it doesn't happen one at a time? When you attack with more than 6 or so on my laptop, it really slows things down to tap and redraw each creature in turn, instead of tapping everything and redrawing once.
Both issue were adressed with 20915.
Single class for single responsibility.
Max mtg
Programmer
 
Posts: 1997
Joined: 02 Jul 2011, 14:26
Has thanked: 173 times
Been thanked: 334 times

Re: Bug Reports (snapshot builds)

Postby friarsol » 09 Apr 2013, 16:28

Max mtg wrote:
friarsol wrote:I wasn't being sarcastic here. Just explaining why it was there, since you may not be familiar with how the quest pets work.
The phases like 'do you realize that...?' express some doubt in mental abilities of a person. That's why I don't like this kind of 'explaination'.
You might just have that commit rolled back and write a note here.
I'm not a big fan of just rolling back other people's changes. Instead, I'll post about it to see if the person making the changes understood what their action actually did.

There was no question on your mental abilities here. This is a large project. I personally worked on balancing the quest pets, so I'm familiar that one of them has Haste and the rest do not. You did not work on balancing the quest pets; what I can tell from your posts, you don't play much of quest mode. This may not actually be true, but that is my perception. The reason I used the phrasing as I did was to find out if you were intentionally trying to change functionality, or if you didn't actually realize the purpose behind the comment and conditional statement it referred to just below it that was changed. I don't believe I said "Max is a stupid head, why is he breaking everything ever?" or anything remotely like that.
friarsol
Global Moderator
 
Posts: 7593
Joined: 15 May 2010, 04:20
Has thanked: 243 times
Been thanked: 965 times

Re: Bug Reports (snapshot builds)

Postby Almeida » 09 Apr 2013, 18:28

hey guys another bug is

i have Havengul Lich in play hearthless Summoning, 2 Priest of Urabrask and 2 Perilous Myr i played the ability of Havengul on Priest and in myr dont work after 5 times this same ability
User avatar
Almeida
 
Posts: 41
Joined: 24 Dec 2011, 04:48
Has thanked: 0 time
Been thanked: 0 time

Re: Bug Reports (snapshot builds)

Postby Max mtg » 09 Apr 2013, 19:31

friarsol wrote:I'm not a big fan of just rolling back other people's changes. Instead, I'll post about it to see if the person making the changes understood what their action actually did.

There was no question on your mental abilities here. This is a large project. I personally worked on balancing the quest pets, so I'm familiar that one of them has Haste and the rest do not. You did not work on balancing the quest pets; what I can tell from your posts, you don't play much of quest mode. This may not actually be true, but that is my perception. The reason I used the phrasing as I did was to find out if you were intentionally trying to change functionality, or if you didn't actually realize the purpose behind the comment and conditional statement it referred to just below it that was changed. I don't believe I said "Max is a stupid head, why is he breaking everything ever?" or anything remotely like that.
Being the one in charge of quest mode balance you have the full priveleges to rollback any changes in your area of interest. Especially after I have admitted that the change was wrong.

I worked on pets conversion to script, QuestController, saves, duels and events... don't remember everything already. I didn't work on balance, never liked it, actually.

I treated the comment as a complaint, that pets still come into play with sickness [but this needs to be changed]. And that's what I did.

You didn't say that exact words, but that was... "my perception". "Do you understand... [how can you NOT understand such a basic thing!] " - that is what perception has said.

What you said that I break everything too frequently may be close to truth, still I hope that the positive effect of my other changes and my speed overweight that drawback.

I had doubts about that change, performed it as an isolated commit because of that. Easy to locate and revert. So do revert, leave a note here (in case I do something similiar) and there will be no objections, especially when the subject is not in my area of expertise or responsibility.
Single class for single responsibility.
Max mtg
Programmer
 
Posts: 1997
Joined: 02 Jul 2011, 14:26
Has thanked: 173 times
Been thanked: 334 times

PreviousNext

Return to Developer's Corner

Who is online

Users browsing this forum: No registered users and 18 guests


Who is online

In total there are 18 users online :: 0 registered, 0 hidden and 18 guests (based on users active over the past 10 minutes)
Most users ever online was 4143 on 23 Jan 2024, 08:21

Users browsing this forum: No registered users and 18 guests

Login Form