[wouso-dev] Despre nivelurile jocului

Alex Eftimie alex at eftimie.ro
Tue Aug 19 10:43:42 EEST 2008


2008/8/19 Vlad Dumitrescu <vlad at dumitrescu.ro>:
> --------------------------------------------------
> From: "Alex Eftimie" <alex at rosedu.org>
> Sent: Tuesday, August 19, 2008 9:15 AM
> To: "Lista de discutii pentru USO Quest" <wouso-dev at lists.rosedu.org>
> Subject: Re: [wouso-dev] Despre nivelurile jocului
>
>> On Mon, Aug 18, 2008 at 11:26 PM, Vlad Dumitrescu <vlad at dumitrescu.ro>
>> wrote:
>>> Salut,
>>>
>>> Am o nelămurire referitoare la codul actual și pentru că sunt multe
>>> locuri
>>> unde ar trebui schimbat vă rog să mă corectați dacă îmi scapă ceva.
>>>
>>> În funcția getStatus din class_quest.php [1], „maxlevel" e caracteristică
>>> a
>>> Quest-ului, iar „levelname" și „levelno" sunt caracteristici ale
>>> userului.
>>>
>>> Propun următoarele modificări:
>>>    - assign direct pentru „maxlevel" în class_pages.php, având în vedere
>>>>>> e condiționat doar de o constantă;
>>
>> Nu sunt de acord: as vrea sa "curatam" class_pages de astfel de
>> assign-uri (sunt acolo tot felul de hack-uri, pentru 'weekstart' de
>> exemplu). Avand in vedere ca `maxlevel' este o constanta globala (care
>> se gaseste in defines), poate ar fi mai bine sa punem toate aceste
>> constante intr-un array si pe acela sa-l assign-am o singura data, in
>> class_pages.
>
> Adică rămân assign-urile care se bazează pe funcții și cele care sunt doar
> constante se transformă în unul singur?
>
> Ex: $this->assign( "const", $array_constante );

Da, sau cream o clasa Util cu o metoda getConstants pe care o apelam
in pages pentru assign-ul de mai sus. Clasa Util ar putea sa mai
contina si alte lucruri care nu isi gasesc deocamdata locul:
redirectarea de exemplu.

>>>    - mutat funcția getStatus în class_uquser.php și schimbat numele în
>>> getGameLevel (aici trebuie schimbate multe apeluri).
>>
>> E ok, desi getStatus statea in Class Quest deoarece avea legatura cu
>> celelalte metode pe care le apela ca sa obtina acest status (nume,
>> valoare).
>
> Oricum numai getStatus apelează metodele pentru nume, limite și nivel real.
> Mai sunt și prin reset_fields.php niște apeluri, dar tot ciudate pentru că
> se fac niște calcule legate de Challenge apelând metode din Quest.

reset_fields.php trece in cronjob.php si trebuie curatat sa faca
apeluri de metode din clase, nu ceea ce este acum acolo. Acest fisier
este o rusine pentru WoUSO :).

>>> De asemenea, pentru a soft-coda numele de niveluri [2] am procedat
>>> astfel:
>>>    - getGameLevel (getStatus deocamdată) face tot (nu mai există
>>> getRealLevel, getLevelName și computeLimits);
>>
>> Nu stiu cat de bine este sa le pui pe toate la un loc. Au fost facute
>> metode separate tocmai pentru ca aveau logica diferita si astfel codul
>> era mai usor de citit.
>
> Ai dreptate, am să le separ.
>
>>>    - numele, limitele și icon-urile (în curând) sunt setate folosind 3
>>> constante în defines.php (ex:
>>> define('GAME_LEVELS_NAMES','Servant,Apprentice,Acolyte');).
>>
>> Daca nu gresesc, poti face si: define ('GAME_LEVEL_NAMES', array
>> ('Servant', 'Apprentice'....)).
>
> În define se acceptă doar scalari. Trebuie să separ string-ul ală cu
> preg_split ca să îl fac array undeva în metoda mea.
>

De preferat fa asta in constructorul unei clase.

Ca o nota generala, ar trebui vazut ce putem face pentru a nu mai
instantia atatea obiecte (eventual constructori statici daca php5
permite). La clasa SQL exista un hack[1] in prezent, dar care evita 18
apeluri de constructor ;)

Alex

[1] http://dev.rosedu.org/trac/wouso/changeset/307
-- 
Alex Eftimie


More information about the wouso-dev mailing list