• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ESYgr1d - A persistent multiplayer online programming game
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    PJOTRIK: Ale ne.
    Jednak, kdyz si ctu tu funkci, tak urcite predpoklada, ze ji posles ty objekty, ktery ziskas napr. pres agentUpdate.Node.AllAgents.
    Coz jsou objekty implementujici IAgentInfo. Z tech GetInitialisedAgent<AgentType>() dostanes jiny objekty, ktery jen obalujou tu skutecnou instanci. Z nich IMHO nikdy neziskas instanci IAgentInfo, ktery ta funkce ocekava.
    PJOTRIK
    PJOTRIK --- ---
    TENCOKACISTROMY: ale to je kolekce IAgent. Pak bych musel jeste pretypovavat na svoji clasu a lezt pres Deck.Endpoint... nechce se mi verit ze je potreba takova opicarna
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    PJOTRIK: Pokud by root pouzival jinej ORM nez linq-to-sql, tak by ten tvuj postup pravdepodobne fungoval.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    PJOTRIK: Ne, interfacy se vzdy jen implementuji. Dedi se tridy. Interface vzdy jen definuje rozhrani, kdezto trida muze (a obvykle to i dela) definuje chovani. Ale to je vedlejsi.

    Tu kolekci ziskas tim, ze z toho objektu co ti vraci ta metoda vemes objekt z property "Implementation". Cili to co jsem posilal: [ TENCOKACISTROMY @ gr1d - A persistent multiplayer online programming game ]
    PJOTRIK
    PJOTRIK --- ---
    ad 1) vsak jsou oboji interfacy, tak snad dedi?

    jinak se nechci prit, vim ze mi to nefunguje, staci mi najit zpusob jak ziskat kolekci IAgentInfo ktera bude fungovat
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    PJOTRIK: Reknu to jinak. To moje funguje, to tvoje ne :).
    1) Nededi to, ale implementuje.
    2) Bohuzel se v jadre Gr1du pouziva linq-to-sql, kde zalezi na konkretnich instancich objektu. Nestaci, ze maji stejne rozhrani a stejny hodnoty.
    3) Ta funkce sice dle statickyho rozhrani ocekava IAgentInfo a ty ocekavas, ze kdyz tam posles cokoliv, co implementuje IAgentInfo, tak bude spravne. Ale ve skutecnosti ta funkce ocekava konkretni instance objektu, ktere shodou okolnosti vzdy implementuji IAgentInfo.
    PJOTRIK
    PJOTRIK --- ---
    TENCOKACISTROMY: to mi uplne nedava smysl...
    IKnownAgent<TAgent> je podedeny IAgentInfo, ktery navic pridava propertu Implementation typu TAgent. Mne o implementaci nejde, naopak potrebuju IAgentInfo
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    PJOTRIK: Uvedom si, ze metoda "GetInitialisedAgents<TAgent>" ti vraci rozhrani IKnownAgent<TAgent>. Pricemz instance agenta se nachazi az v property "Implementation". Cili potrebujes:
    Deck.GetInitialisedAgents<IAgent>
    .Where(a => a.Node.Sector == agentUpdate.Node.Sector)
    .Select(a => a.Implementation);
    



    Obecne: To ze nejakej objekt implementuje nejaky rozhrani, jeste neznamena ze tim objektem skutecne je. Muze to byt klidne jen wrapper (coz je tento pripad) nebo jinej "trik", jak zajistit treba pohodlny pouzivani nejakyho objektu z hlediska uzivatele-vyvojare.
    PJOTRIK
    PJOTRIK --- ---
    MATASX: ale KnownAgent dedi od IAgentInfo... to pretypovat neni problem, ale pak je tam nekde v kodu dalsi pretypovani, ktery uz neprojde

    a bokem, muzete mi nekdo poslat do areny nejakyho losera? zrovna je tam volno, tak bych si konecne moh vyplnit task...
    MATASX
    MATASX --- ---
    PJOTRIK: Tohle není uplně dobrej nápad, Deck.GetInitialisedAgents - tím dostaneš přímo instance svých agentů. Musíš použít třeba Node.AlliedAgents coz vraci kolekci rozhrani IAgentInfo (coz neni instance agenta). Pretypovani mezi IAgent a IAgentInfo asi neexistuje.
    PJOTRIK
    PJOTRIK --- ---
    na IRC mi zatim nikdo neporadil, tak se zeptam i tu.

    Jak poustite skilly ktery maj jako parametr kolekci agentu?
    zkousim this.Haste(Deck.GetInitialisedAgents<IAgent>().Select(ka => ka as IAgentInfo).Where(a => a.Node.Sector == agentUpdate.Node.Sector));
    do syslogu to vypise "Calling direct agent collection skill Haste @Pjotr(FiGrid.DefenderThree(3,2)),Pjotr(Experimental.SuccessiveHaste(5,1))" coz sedi, ale pak to vyhodi vyjimku
    System.InvalidCastException: Unable to cast object of type 'Gr1d.Runtime.KnownAgent`1[Gr1d.Api.Agent.IAgent]' to type 'Gr1d.Runtime.RuntimeAgent'.
    at Gr1d.Runtime.Skill.TargetAgentCollectionResult.GetRolledAgentResult(IEnumerable`1 targets, RuntimeAgent caster, Func`3 skill, Boolean wait) in C:\Users\Nathan\Projects\gr1d.org\source\Gr1d.Runtime\Skill\TargetAgentCollectionResult.cs:line 26
    at Gr1d.Runtime.Skill.SkillProvider.Direct(IAgent caster, Func`3 skill, IEnumerable`1 targets) in C:\Users\Nathan\Projects\gr1d.org\source\Gr1d.Runtime\Skill\SkillProvider.cs:line 367

    prijde mi to jako bug gridu, ale nejsem si jistej. Navic mi prijde divny ze by na to jeste nikdo nenarazil...
    SUK
    SUK --- ---
    GOSHEWAN: Netusim. V ticku delam bud presun nebo claim a nikdy jsem to nesledoval. Jen jednou jsem meril kolik mi to dava a bylo to trosku min, protoze mi nekdo nodiky uzira...
    GOSHEWAN
    GOSHEWAN --- ---
    (mluvime o teoreticke maximalni hodnote bez failu a za predpokladu vzdy claimable nodu)
    GOSHEWAN
    GOSHEWAN --- ---
    SUK: Ty mas 0.5 nodu na agenta za tick? Ja se porad jeste uplne neorientuju v tom warmup a cooldown, takze to asi chapu spatne, nicmene zatim jsem vychazel z toho, ze claim + move trvaji celkem 3 ticky -> maximalne 1/3 nodu na agenta za tick. Jak to tedy je?
    SUK
    SUK --- ---
    Hele, na to kaslu... za 480 ticku si nahrabu 4800 nodu. To mi za tu tisicovku expu a minusovy nody fakt nestoji :) Kdybys byl bliz, tak mozna...
    PJOTRIK
    PJOTRIK --- ---
    Mistni hackeri uz to asi vedi, ale potesilo... haste okamzite funguje i na sesilajiciho agenta takze toho desitkovyho cooldownu neni treba se bat :-)
    SUK
    SUK --- ---
    Tyvole! 480 ticku? To si ze me delate prdel ne? q
    GOSHEWAN
    GOSHEWAN --- ---
    SUK: Ty to mas za pekne dlouho. Uvidime jestli je posle znovu, az mu je (snad) opet killnu.
    SUK
    SUK --- ---
    Jdu :D
    GOSHEWAN
    GOSHEWAN --- ---
    Neni tu nekdo kdo si chce splnit defent another player task? Zde to je celkem zadarmo (:
    Kliknutím sem můžete změnit nastavení reklam