Farmscript...

77 views
Skip to first unread message

suthes

unread,
Apr 17, 2010, 12:47:50 PM4/17/10
to TT Dev
He,
Ik zal me eerst even voorstellen... Ik ben Suthes, 15 jaar en speel al
vrij lang op Tribal Wars. Tribal Wars is niet mijn enige bezigheid op
de computer, ik vind het ook leuk om van alles te maken.

Ik ken al die programmeertalen niet uit mijn hoofd, maar met een
referentie erbij (W3Schools!) kom ik al een heel eind. Met deze talen
heb ik wel eens wat gedaan:
- HTML (iedereen begint ermee?)
- CSS
- PHP & XML
- JavaScript

Nou ben ik zelf begonnen met een persoonlijke versie van een
farmscript. Het werkt heel anders dan die van Zalastra, alleen het
doel is hetzelfde. Verder is het ook een stuk minder
gebruikersvriendelijk en ik zal het dus ook niet groots openbaar
maken.

Het werkt zo:
- Je gaat naar de kaart en drukt op je snellijstscript
- Het script gaat vervolgens ALLE dorpen langs in je kaart. Daar zal
hij een serie van tests op doen om te kijken of ik hem mag aanvallen
of niet. (Eigenaar, stam van de eigenaar, resultaat laatste aanval,
tijd laatste aanval etc.)
- Indien hij aangevallen mag worden, worden er wat gegevens verzameld.
Dit zijn de coördinaten en de afstand...
- De gegevens worden in een array gezet en gesorteerd naar afstand.
Deze worden in een "alert" weergegeven.
(bedankt Lekensteyn voor die laatste stap)

Hier het script met allemaal in-line comments om het duidelijker te
maken:
http://pastebin.com/FgAfMKBG

En hier een script dat werkt in FF en Opera (IE niet getest, maar daar
hoeft hij niet voor te werken...)
http://pastebin.com/ERpgUvbZ

Als je iets fouts ziet (of wat beter kan). Graag zeggen, ik ben er nog
niet zo heel goed in...


Nu geeft hij coord, afstand (Enter) coord, afstand (enter) enz.

Nu kom ik bij het volgende probleem:
Ik kan geen link in alert zetten :( Ik wilde dit doen, zodat er in de
tw-pagina auto troepen werden ingevuld en de coord onder je Ctrl+V
kwam (dat mag toch?). Hoe kan ik dit doen?

--
Je ontvangt dit bericht omdat je je hebt aangemeld voor de Google
Discussiegroepen 'TT Dev'-groep.
Als je een bericht naar deze discussiegroep wilt verzenden, stuur je
een e-mailbericht naar tt-...@googlegroups.com
Als je je wilt afmelden voor deze discussiegroep, stuur je een
e-mailbericht naar tt-dev+un...@googlegroups.com
Ga naar deze discussiegroep op
http://groups.google.com/group/tt-dev?hl=nl voor meer opties

De tools vind je op: www.tribetool.nl
Tribe Tool is een verzamelsite van tools voor Tribal Wars.

Zalastra

unread,
Apr 18, 2010, 9:30:03 AM4/18/10
to TT Dev
Hoi,

Ziet er best netjes uit :)
Heb wel een paar opmerkingen:
#1 Wrap je script in een functie, zoals het script nu is definieer je
alle variabelen in de global scope. Dit kan problemen veroorzaken met
andere scripts.
Dus dan krijg je:
(function(){
/* script goes here */
}());

#2 Zo te zien gebruik je elke keer als wilt kijken of iets niet klopt
de constructie if (! (param1 == param2)) Dit kan je beter/duidelijker
doen door het uitroepteken in de vergelijking zelf te zetten: if
(param1 != param2)

#3 Ander puntje over het gebruik van vergelijking operatoren, je
gebruikt afwisselend == en ===. Ik neem aan dat je dan ook het
verschil weet, en ik raad je aan om gewoon altijd === en !== te
gebruiken. Dit voorkomt problemen als je ergens per ongeluk de ==
gebruikt waar === noodzakelijk was.

#4 alleen functies hebben een eigen scope, for loops en dergelijken
hebben geen eigen scope. Je declareert dus op gegeven moment twee keer
in dezelfde scope de variabele i. Ik geloof niet dat het in een
browser tot problemen leid, maar het is in ieder geval technisch
gezien niet juist om te doen. Je zult dus of ff moeten opletten welke
variabelen je allemaal al gedeclareerd hebt in een bepaalde scope. Je
zou eventueel alle declaraties gewoon helemaal aan het begin van de
functie kunnen zetten waar je ze in gebruikt. Dit gebeurd namelijk ook
in de interpreter, het maakt niks uit waar precies in de code je een
bepaalde variabele declareert, ze zullen toch altijd aan het begin van
de scope gedeclareerd worden door de interpreter.

Je zou nog een stap verder kunnen gaan en zelfs maar 1 keer het
keyword var gebruiken:
function(){
var i,
str = "blahblah",
fun = function() {return 1;},
fun2 = function() {alert(str);};
/* do stuf */
}

#6 Nog een heel klein dingetje, als je een javascriptcompressor op je
code gebruikt zal deze het niet doen. Dit komt door je rekensommetjes
met "iets % 60" De javascript compressor haalt de spaties weg en omdat
het script gebruikt wordt als een url zal de browser %60 naar `
converteren. Ik weet niet hoe jij het script momenteel runt, en of je
de javascriptcompressor gebruikt. Dus wellicht was je hier al op de
hoogte van, maar ach kan geen kwaad om het nog ff te zeggen. Misschien
handig om er nog ff een comment bij te zetten in je code.


Nu betreft je vraag: Je mag de URL natuurlijk gewoon direct in je
locationbar zetten scriptgewijs zodat je automatisch naar die pagina
gaat. Het gaan naar een pagina wordt gezien als 1 actie, en dat mag je
dus gewoon doen:
location.href = "game.php?village=X&screen=place"
Om de coördinaten in te vullen hoef je helemaal niet moeilijk te doen
met kopiëren/plakken. Op de kaart kan je gewoon het id van het dorp
uitlezen en dan plak je achter die url nog gewoon "&target=id"
> hoeft hij niet voor te werken...)http://pastebin.com/ERpgUvbZ
>
> Als je iets fouts ziet (of wat beter kan). Graag zeggen, ik ben er nog
> niet zo heel goed in...
>
> Nu geeft hij coord, afstand (Enter) coord, afstand (enter) enz.
>
> Nu kom ik bij het volgende probleem:
> Ik kan geen link in alert zetten :( Ik wilde dit doen, zodat er in de
> tw-pagina auto troepen werden ingevuld en de coord onder je Ctrl+V
> kwam (dat mag toch?). Hoe kan ik dit doen?
>
> --
> Je ontvangt dit bericht omdat je je hebt aangemeld voor de Google
> Discussiegroepen 'TT Dev'-groep.
> Als je een bericht naar deze discussiegroep wilt verzenden, stuur je
> een e-mailbericht naar tt-...@googlegroups.com
> Als je je wilt afmelden voor deze discussiegroep, stuur je een
> e-mailbericht naar tt-dev+un...@googlegroups.com
> Ga naar deze discussiegroep ophttp://groups.google.com/group/tt-dev?hl=nlvoor meer opties

Lekensteyn

unread,
Apr 19, 2010, 1:42:27 PM4/19/10
to TT Dev
Leuk om met versie 0.0 te beginnen :p

Zalastra vertelt je waar het fout gaat.
Aanvullingen op Zalastra's post:
#1: plaats er eventueel void voor:
void(function(){
/* code */
})()
Dat is nodig bij javascript:-urls, anders is het mogelijk dat er een
nieuwe pagina wordt geopend.

#3: == en != betekenen gewoon "is gelijk aan" en "is niet gelijk aan".
=== en !== gaat nog verder, het controleert ook datatype.
Zo geeft true == 1 true terug, maar true === 1 false.
De reden is dat true een boolean is, en 1 een number.
Die typen kun je met typeof controleren:

var test = 1;
alert(typeof test); // geeft number
/* Hetzelfde als:
alert(typeof(test));
typeof is een speciale taalconstructie, en hier zijn de haakjes geen
functieaanroep, maar groeperen, zoals (1 + 1) * 2
*/

#6
Zalastra maakte al duidelijk dat veel compressors eventuele spaties na
% verwijdert. Dat kan problemen opleveren in de URL omdat %xx een
escape ding is. Zo is %20 in een URL een spatie.
Test maar uit (voer in adresbalk in):
javascript:alert('Dit is blijkbaar een spatie: "%20"')
Je zou http://dev.tribetool.nl/packer kunnen gebruiken met
"Veilig voor snellijst/URL" aangevinkt.

Nu gebruik je window.alert(), maar als je geen behoefte hebt aan een
schermvullend overzicht zou je window.confirm() kunnen proberen.

Trouwens, window.alert() is meestal hetzelfde als alert().
Dat komt omdat window de globale object is.
Zou je in een <script>-tag bijvoorbeeld een variabele definiëren, dan
is die ook beschikbaar onder window.variabelenaam:
<script>
var variabele = 'wat dinges';
alert(window.variabele);
</script>


Ik wil je eraan herinneren dat coördinaten automatisch invoegen
verboden is geworden. Wel mag je nog game.php?screen=place&target=xxx
gebruiken.

Wat je zou kunnen doen is een overzicht genereren met BB code links,
en
deze bij Notities opslaan.
Dan is het kwestie van Notities openhouden en steeds een link in een
nieuw tabblad openen.

Door een spelupdate kun je nu ook de links opbouwen met behulp van een
variabele die op elke game.php pagina beschikbaar is:

game_data.link_base
Dit bevat bijvoorbeeld game.php?village=123&screen=

Dan kun je zoiets toepassen:

location.href = game_data.link_base+'place&target='+target;
> > Ga naar deze discussiegroep ophttp://groups.google.com/group/tt-dev?hl=nlvoormeer opties

suthes

unread,
Apr 20, 2010, 8:33:37 AM4/20/10
to TT Dev
Hm... Dat is veel leesstof :)
Ik weet dat je de scripts moet packen, maar om de een of andere reden
doet hij het zonder packen ook... (ik gebruik die op TT Dev staat)

Maar als ik het goed begrijp, is het toegestaan om een targetid te
geven (wat uiteindelijk ook coords invult), maar niet toegestaan om
coords direct in te vullen? Dan kunnen we toch makkelijk faketools zo
aanpassen dat er ipv coords, id's in de configuratie moeten staan?
Zelfde geldt voor alle tools... Bijv. laatst aangevallen dorp
invullen, gewoon de link aanpassen (en ipv de coords onthouden, het ID
onthouden).

En ik zal proberen mijn script wat te gaan aanpassen, volgens jullie
tips :)
> Je zouhttp://dev.tribetool.nl/packerkunnen gebruiken met

Zalastra

unread,
Apr 21, 2010, 5:41:23 AM4/21/10
to TT Dev
Als we bedenken dat het altijd mocht om coördinaten in je script te
gooien, zou dit wat mij betreft idd niet horen te verschillen voor het
in een script gooien van id's. Of Duckje daar hetzelfde over denkt
weet ik niet. Check het discussie topic: toestemming aanvals scripts.
Ik heb daar mijn hele communicatie met Duckje hierover ingezet. Ik heb
het eigenlijk enkel gehad over het uitlezen van de id's van een tw-
pagina, bookmarks (favorieten) in dit geval. Coörds onthouden kan
natuurlijk wel nuttig zijn voor eventuele afstand berekeningen ;)

Ik ben overigens een tegenstander van faken, uiteraard is de
regelwijziging niet de oplossing, want je kan nog steeds massaal faken
(kost alleen wat meer moeite) maar als iemand nou op dit principe een
fakescript gaat maken is er grote kans dat ze weer de regels gaan
aanpassen. Waarschijnlijk op zo'n manier dat weer faken niet wordt
opgelost en we alleen maar met nog kuttere regels voor scripts zitten.
Dus ik raad niet aan om dat te doen.
> > Je zouhttp://dev.tribetool.nl/packerkunnengebruiken met
> ...
>
> read more »

Lekensteyn

unread,
Apr 21, 2010, 1:39:47 PM4/21/10
to TT Dev
Packen is alleen bedoelt om ruimte te besparen, het is niet verplicht.

En TW verzint idiote regels, en wij als scripters moeten daar maar een
oplossing voor vinden.
> > Je zouhttp://dev.tribetool.nl/packerkunnengebruiken met
> > e-mailbericht naar...
>
> meer lezen »
Reply all
Reply to author
Forward
0 new messages