anonīms Posted February 1, 2010 Report Share Posted February 1, 2010 Mēģinu veidot lietotāju xp (xperience) līmeņus, bet ir radies viens jautājums. Pagaidām viss izskatās šādi: http://paste.php.lv/7a905c93a9b6d51c8c089e71f14683c1?lang=php Itkā jau ir viss ok, ja db būtu šādi: (id, xp, lvl) 1, 9, 1 15, 15, 2 bet, ja teiksim lietotājam tiek iedots xp daudzums tāds, ka viņam vajadzētu uzreiz pārmest uz par 2 vai vairāk līmeņiem? Piemēram šim: Takā viņam ir vairāk par 99, un tas viss notiek ar vienu reizi, tad viņam tiks paaugstināts līmenis vienu reizi. 15, 151, 2 bija doma kaut kā tajā check_lvl() varbūt iemest while, kas veikto if nosacījumu tik ilgi, kamēr lvl ar xp sakrīt, bet doma, kā izveidot to daļu nav. Viens variants varētu būt kkā to array apgriezt riņķi un tad no beigās skatīties vai xp ir lielāks par noteikto, un ja ir, tad dodam to lvl, kas atrodas array'jā pretī xp. Bet kā to panākt gatavu? Quote Link to comment Share on other sites More sharing options...
waplet Posted February 1, 2010 Report Share Posted February 1, 2010 Es darītu tākā tu mineji ķipa: if($exp >= 300 && <350){ $level = 1; }elseif($exp >=350 && $exp < 400){ $level = 2; }... Quote Link to comment Share on other sites More sharing options...
anonīms Posted February 1, 2010 Author Report Share Posted February 1, 2010 Un kā es varētu tos datus tā smuki no array dabūt ārā vai tomēr vajadzēs likt parastos stringos? $lvl1 = 9; $lvl2 = 19; $lvl3 = ?; A zin, ko, tas laikam pat būs labāk :] Mēģināšu šādi un, ja kkas nebūs, ka vajag, rakstīšu. Quote Link to comment Share on other sites More sharing options...
waplet Posted February 1, 2010 Report Share Posted February 1, 2010 (edited) ir ķipa <? $array = array('0','9','19','31'); $exp = 5; foreach($array as $key=>$value){ //print $key."=>".$value."<br/>"; if($exp >= $value && $exp < $array[$key+1]){ $limenis = ($key+1); print "Limenis: ".$limenis; } } ?> Limenis: 1 noobs iekš php... tagad mēgināšu praktizeties vairāk rakstot kodus.. sanāca, kaut kā šādi. Edited February 1, 2010 by waplet Quote Link to comment Share on other sites More sharing options...
anonīms Posted February 1, 2010 Author Report Share Posted February 1, 2010 (edited) http://paste.php.lv/2c639c10ebf1e00b91ad5c83cd4429c3?lang=php Kods izskatās šāds. Ja ir kādi ieteikumi tad rakstiet. Vienīgi, kas man nepatīk ir garie ifi, bet nu, lai ir. EDIT: Tikko ieraudzīju waplet kodu. Palūrēšu. EDIT2: Tavā variantā foreach baigi iedos, ja lvl būs daudz un lietotāji virs 1k. Palikšu pie sava, bet kods tavs labs. Edited February 1, 2010 by anonīms Quote Link to comment Share on other sites More sharing options...
usver Posted February 2, 2010 Report Share Posted February 2, 2010 if($users['xp'] < $lvl1) { $lvl = 1; } elseif($users['xp'] < $lvl2) { $lvl = 2; } elseif($users['xp'] < $lvl3) { $lvl = 3; } elseif($users['xp'] < $lvl4) { $lvl = 4; } elseif($users['xp'] < $lvl5) { $lvl = 5; } elseif($users['xp'] < $lvl6) { $lvl = 6; } elseif($users['xp'] < $lvl7) { $lvl = 7; } elseif($users['xp'] < $lvl8) { $lvl = 8; } elseif($users['xp'] < $lvl9) { $lvl = 9; } elseif($users['xp'] < $lvl10) { $lvl = 10; } Nu i nafik audzināt šitādu koda rakstības stilu. Tādi palagu koderi jāaudzina, kamēr maziņi :) vajag prasti, ērti, papildināmi: $levelis = get_data("select ID FROM user_xp_levels WHERE level_points <= $users['xp'] ORDER BY level_points DESC limit 1;"); echo 'jūzerim ir '.$levelis['ID'].' līmenis<br>'; Datubāzē vaidzēs tabulu, kur glabājas visi līmeņi: [ ID ][ level_points ][ title ] --------------------------------- [ 1 ][ 0 ][ n00b ] [ 2 ][ 100 ][ novice] .. [ 10 ][ 10000 ][ wizard] Viss ērti, smuki, datubāzē maini ko gribi taitļus/punktus, un tikai 2 rindiņās :) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.