Ok, allereerst maar even een reactie op het serververhaal:
Ik denk ook dat er nog eens bekeken moet worden wat voor waarden de servers nu moeten draaien. Sowieso vind ik het al vreemd dat bots die binnenkomen beginnen met een lage energie en eerst nog hun accu volledig moeten opladen. Op die manier bevoordeel je de bots die al aanwezig zijn, terwijl juist het binnenkomen een lullige positie is. Als jij naast een andere bot spawnt die al volledige energie heeft kan hij je zo overhoop knallen.
Verder denk ik ook dat het beter is om de blastradius en blastdamage aan elkaar te koppelen, het uitgangspunt moet zijn dat de bot die het best de positie van de andere bot voorspelt daar voordeel van heeft. Dus een grote blastradius zetten om toch maar iets te raken zou moeten worden gecompenseerd door het doen van minder schade.
Ten slotte ben ik ook bezig met het coden van m'n eigen botje in PHP, maar ik loop nu toch echt tegen een muur op waar ik niets van snap. Ik heb net ook op IRC al zitten overleggen met KoHa, wel wat bugs gevonden, maar ik snap niet waarom het misgaat.
De situatie is als volgt: Ik heb de tutorial gevolgd, en de 'bot' die daaruit resulteert draait gewoon, hij komt binnen en leeft iets van 15 turns totdat de time out de boel afsluit.
Aangezien ik liever een modulair botje heb ben ik dat tutorialscript om gaan zetten in een OO script. Ik gebruik precies dezelfde manier van connecten en connectie checken, maar nu komt m'n script dus op het moment dat ik de VERSION wil gaan wegschrijven aanzetten met de Warning dat m'n stream geen stream meer is.
[Als onderstaande codedump niet wordt geapprecieeerd zal ik hem verwijderen]
Net als iedereen open ik m'n socket met:
code:
1
2
3
4
5
| $this->fp=fsockopen($botSERVER, $botPORT, $errno, $errstr, 30);
if(!$this->fp){
$this->error="Could not open socket to $botSERVER:$botPORT: $errstr($errno)\n";
return false;
} |
Hierna gaat de functie gewoon verder, het if-statement execute niet, want $this->fp bestaat gewoon. Ook fsockopen geeft geen errors.
Daarna probeer ik echter wat naar de stream te schrijven, met:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| $this->out.="VERSION 2\n";
$this->flushOut();
function flushOut(){
echo "DEBUG ".microtime_float()." : In Toiletbot flushOut()<BR>";
if(strlen($this->out)>0){
echo "DEBUG ".microtime_float()." : In Toiletbot flushOut(), binnen lengte loop:: $this->out<BR>";
fwrite($this->$fp,$this->out);
$this->sentTurnTime=microtime_float();
$this->comLog.=$this->sentTurnTime. " $this->name >>> $this->out";
$this->out="";
}
} |
Hieruit resulteert dan de error dat het argument aan fwrite() geen valid stream resource is. Waarom dit niet zo is, en waarom ik dat dan niet van eerder hoor (van fsockopen, omdat het openen niet goed gaat bijvoorbeeld) weet ik niet. Ik ben nu al een paar dagen naar de code aan het staren, en na vanavond weer een avondje debuggen ben ik er nog steeds niet uit.
De tutorial gebruikt precies hetzelfde principe en draait wel op mijn computer, ook een voorbeeldfile van iemand anders gebruikt precies dezelfde principes. Ik zie het echt niet meer, dus als er hier iemand is die zo ziet waar het mis gaat, of die zin heeft om m'n code te bekijken (die staat
hier): GRAAG!