MrLoick / ghostplusplus

Automatically exported from code.google.com/p/ghostplusplus
Other
0 stars 0 forks source link

Game doesn't end after throne is destroyed #51

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
The issue is that sometimes games don't end shortly after the throne is
destroyed (there is one player still in the game). I think it may be
because the player has not clicked a button (Quit Game or Continue Playing)
and just left their PC at that prompt. Would it be possible to
automatically kick all players after, say, 15 seconds of destroying the
throne? 

Also, I have my configs set so that when there are less than 2 players left
in the game, the countdown timer will start - this way even if someone
doesn't choose Quit Game or Continue Playing, ghost should auto end the
game. However, this doesn't work after the throne is destroyed.

Original issue reported on code.google.com by liur...@gmail.com on 8 Oct 2009 at 7:13

GoogleCodeExporter commented 8 years ago
GHost++ already ends the game 60 seconds after the throne/tree is destroyed in 
DotA.
It also ends the game 60 seconds after it detects that there is only one player 
left
in the game.

Can you provide logs with evidence of the error? I also don't understand what 
you
mean by: "Also, I have my configs set so that when there are less than 2 
players left
in the game, the countdown timer will start". GHost++ does not have any such
configuration options. If you're using GHostOne I cannot provide any support 
for you.

I'll leave this issue open for now but I won't start work on it until I see some
evidence that there's actually a problem.

Original comment by hogantp on 9 Nov 2009 at 4:50

GoogleCodeExporter commented 8 years ago
sometimes it doesnt end the game
1 player start to killing all others and getting a huge stats

Original comment by bazarov...@gmail.com on 10 Nov 2009 at 12:51

GoogleCodeExporter commented 8 years ago
I'll need some logs or a replay or (even better) both.

Original comment by hogantp on 10 Nov 2009 at 1:06

GoogleCodeExporter commented 8 years ago
http://localhostr.com/files/7a5dc1/replay.rar

Original comment by bazarov...@gmail.com on 10 Nov 2009 at 1:29

GoogleCodeExporter commented 8 years ago
hogantp:
 I think they are highly confused and are misrepresenting their issues with the wrong
words. I just watched the replay. The game ended after the throne was killed as 
it
should.

The other issue about padding stats after players leave exists and IMO should be
worked on but the throne is very much still standing at that point. I've seen 
many of
my GHost++ games stay open for much longer than necessary because one player or 
two
are still in the game killing people that have already left. I think this is the
issue they are talking about even though they mention after the throne being 
destroyed.

I hope this clarifies. Their posts were way off base to the replay I watched.

Original comment by robertcl...@gmail.com on 10 Nov 2009 at 4:00

GoogleCodeExporter commented 8 years ago
lol man
when all left, countdown timer works too, i dont know real time, 1 or 2 minutes
but when same team left, game ends automatically
ghost doesnt disconnect them, but it doesnt collect any stats after that time
how it should be i mean

Original comment by bazarov...@gmail.com on 10 Nov 2009 at 4:25

GoogleCodeExporter commented 8 years ago
I see. The issue of DotA stats being recorded when they "shouldn't" be is a
complicated one. First you have to decide when you should stop recording stats, 
then
you have to consider that GHost++ doesn't typically have access to enough 
information
to accurately detect the appropriate conditions. For example, detecting that 
all the
players on one team have left is impossible because of the existence of the -sp 
and
-switch commands in DotA. GHost++ doesn't know the outcome of those commands and
therefore it doesn't know who's on which team. That said, it's possible for it 
to
detect whether those commands have been used or not so it could be written to 
work
when no shuffling or swapping takes place but I prefer to write solutions that 
work
in all cases rather than just some.

It's also complicated by the fact that the statistics sent by DotA are typically
summary statistics (e.g. it doesn't send a message every time you get a creep 
kill,
it just says "you got 94 creep kills" when you leave the game). Some very few
statistics such as hero kills are sent as they happen, but they're also sent as 
a
summary at the end of the game. In addition to this, some summaries are sent 
more
than once (e.g. creep kills are sent when you leave the game and also when the
tree/throne dies). Occasionally the summaries do not match for whatever reason, 
so
it's difficult to decide which one is correct.

GHost++ only records the end of game summaries that are sent when the 
tree/throne
dies and ignores the other messages, aside from printing some notices to the 
server
console for information and entertainment purposes.

All of that said, I know that the DotA meta data format has changed at least 
once
since the statsdota code was written and the parser has not necessarily been 
updated
to follow every change. It's possible some of these issues have already been 
solved
but that GHost++ doesn't know how to read the new data.

In summary, as the DotA map is currently written (that I'm aware), it would be
possible for GHost++ to attempt to determine when statistics gathering should 
stop
but it wouldn't be a sure thing. In addition, even if it could make that 
decision it
wouldn't necessarily be able to stop gathering statistics anyway since it would 
be
forced to choose between one of two summaries, e.g. the number of creeps you had
killed when you left the game or when the tree/throne died. The ideal solution 
is for
the DotA meta data format to be modified or rewritten with this in mind but 
it's not
something that I have any desire to campaign for especially since it would 
require
rewriting a fair amount of code in GHost++.

Original comment by hogantp on 10 Nov 2009 at 4:40

GoogleCodeExporter commented 8 years ago
ill do my best to have a replay where i can still play after throne was owned 
or 
admin used !end command

Original comment by bazarov...@gmail.com on 10 Nov 2009 at 6:47

GoogleCodeExporter commented 8 years ago
Actually, the issue I posted was about games not always automatically ending
(unhosting) after the throne is destroyed - absolutely nothing to do with 
score. It's
my fault; I don't think I described the issue clear enough. The game "ends" in 
the
sense that all players are frozen after the tree/throne is destroyed; you can't
fountain feed in this state because you can't control the hero. However, the 
issue is
that the game timer continues because one or more players are still connected 
to the
bot (e.g. they don't click "continue playing" or "quit game" buttons), so the 
game
timer continues. This results in the game still being hosted by the bot (I can 
type
".getgames" and it would still show the game), and stat tracking displaying 
everyone
as leavers because the game timer runs for three hours when it ended at 50 
minutes. 

As you probably know by now, I am indeed talking about Ghost One and not 
Ghost++. I
apologize for posting it in the wrong googlecode site. However, if this issue is
indeed in Ghost++, then it will carry over into Ghost One. But I do understand 
that
if this issue is rooted in Ghost One, then it may not necessarily be in Ghost++ 
- at
which point again I apologize for wasting your time.

As for stat padding (fountain feeding), I did post a solution in the Ghost One
support forums. By looking at the source files, I did notice that the only true
scores that are recorded are the ones decomposed from the packets sent at game 
end.
However, my compromise was to replace only the kills and deaths, as those are 
the
main stats inflated by fountain feeding. Since Ghost recieves packets when a 
player
dies, we can very well keep track of kills and deaths. We'd first have to 
create a
kills, deaths, and hasLeft (not sure, but maybe we can use the "leaver message 
sent"
boolean? If not, we can just create a new "hasLeft" boolean initialized to 0 
and set
it to 1 when player gets kicked/disconnects/leaves) variable for the dota game 
player
class. Then, we simply include a logic check to see if the victim has already 
left
the game, and if so, do not increment the killer's kill count. And vice versa, 
if the
killer has left (team is using the leaver), then do not increment his score 
because
he was not controlling the hero. However, if the victim has not left the game, 
his
death count will be incremented even though he was killed by a leaver because 
he was
still under control of his hero.

This compromise will still pull assists, creep score, tower kills, courier 
kills,
etc. from the final packet(s) at end game, but we will ignore the kills/deaths 
from
the final packet(s) and instead store the variables that we manually maintained.

Original comment by liur...@gmail.com on 10 Nov 2009 at 9:16

GoogleCodeExporter commented 8 years ago
I'm not aware of a bug with the gameover timer in GHost++. If you can provide 
me with
logs and/or a replay from a GHost++ bot rather than a GHost One bot I'll look 
into it
but at this point I have to assume it's a problem with GHost One rather than 
GHost++.
I'll close this issue for now.

Original comment by hogantp on 11 Nov 2009 at 4:07