Hey,
Ik ben bezig met een eigen MMORPG (Massive Multiplayer Online Roleplaying Game) nu wil ik een "misdaden" script maken.
Dit is ongeveer hetzelfde aan; zoals de meeste van bootleggers, mobstar, barafranca kennen. Nu heb ik een script die wel werkt, maar toen kwam ik erachter dat die percentages van kans op slagen elke keer anders zijn. Nu weet ik dat dit kan met de functie: rand(). Maar ik weet niet hoe ik dat ook nog eens doe met de SQL. Want hij moet immers de slaginspercentage onthouden.
Weet iemand hoe ik dit kan doen, dit zou mij echt ongelooflijk helpen?
Dan kun je voor elk percentage een array opstellen met nullen en enen, netals binair^^
dus bereken de kans, bijv. 50%, dan is het:
array(0,1);
En daar haal je de random uit.
dan kan je evengoed slaagkans(33); maken, en 33 enen en 76 nullen in een array gooien, want als je op jouw manier 87 procent wilt gebruiken ga je een nogal lange functie krijgen
Op die manier kan je gemakkelijk $kans aantal eentjes erin gooien, dus als je gewoon die nullen dan nog aanvult en een outputmessage eraan hangt is het klaar (we geven hier de pap niet in de mond hoor) en gebruik je je functie gewoon als
Overigens kwam het idee van een array wel van mijn kant;-)
En daar ben je trots op?
Ennuh:
Citaat:
[..code..]
Werkt niet altijd, want als een array 3 elementen heeft, dan geeft count() 3 terug. En de hoogste index is dan 2, dus krijg je errors:
Notice: undefined index 3
Ik heb in de MySQL een kolom "misdaden"
In deze kolom zit hetvolgende
0|0|0|0|0|0|0|0|0
Dit zijn er negen, de eerste voor de tijd wanneer de misdaad is gedaan.
Ik snij het eerst met explode() in stukken, zodat je de percentage's van 8 misdaden hebt.
Dan doe je gewoon $aGesneden[$iMisdaadNr]; en dan > dan rand(1,100);
En zo heb ik per type misdaad een bepaald aantal %en dat er bij of er af kan gaan, onder de 25% is dit standaard wat meer, omdat je anders nooit op weg kan komen.
Btw op een eind moet je altijd een for loopje doen die controleert of het niet boven de honderd zit.
Normaliseren? Shut the
Ik heb gewoon alles in een tabel geflikkerd genaamd "leden", werkt gewoon wat praktiser, hoef je ook niet zo te kloten. Jij hebt geen benul hoe hoog de serverloads kunnen zijn dankzij al die mysql query's, en dat is echt knooi werk om zo zuinig mogelijk te zijn .
Ik heb die van mij even uitgewerkt, want hij deed het eerst niet, allebei niet, erg dom van me, dus ik dacht dat moet ik even rechtzetten:p
Netjes uitgewerkt kom ik tot dit:
@nemesis: idd, het eerste argument is de beginindex. Dat stelde ik ook voor eerst, maar Fenrir gaf het NOG korter, dus ik snap niet waarom je al die moeite doet, Legodoos, als het ook in 1 regel kan. En dat is volgens mij ietsje sneller.
Woops je hebt gelijk murfy. Sorry, heb volledig over jou code gezien. Maar je hebt gelijk, het antwoord is al lang gegeven op zijn beste, eenvoudigste, logischte en snelste manier.
en het werkt voor geen meter, want dat lijkt me heel erg slecht. Verder voer je gewoon vijf volle query's uit
Misschien dat jij op z'n hoogst dus 2 leden online hebt, maar als je 200 leden online hebt, dan zijn dat alleen al 1000 query's per seconde (theoretisch hè ).
$query = 'UPDATE Login SET crime1 = "'.$rand1.'" WHERE naam = "'.$username.'"';
$result = mysql_query($query);
$query = 'UPDATE Login SET crime2 = "'.$rand2.'" WHERE naam = "'.$username.'"';
$result = mysql_query($query);
$query = 'UPDATE Login SET crime3 = "'.$rand3.'" WHERE naam = "'.$username.'"';
$result = mysql_query($query);
$query = 'UPDATE Login SET crime4 = "'.$rand4.'" WHERE naam = "'.$username.'"';
$result = mysql_query($query);
$query = 'UPDATE Login SET crime5 = "'.$rand5.'" WHERE naam = "'.$username.'"';
$result = mysql_query($query);
$query='UPDATE Login SET crime1 = "'.$rand1.'" WHERE naam = "'.$username.'"';
gewoon even goed nadenken over een algoritme
dit is inderdaad geen oplossing, tuinstoel heeft het helemaal bij het goede eind als hij zegt dat dit een ontzettende load op de server kan veroorzaken al gaat je game een keer helemaal goed lopen en krijg je enkele honderden mensen die aan het spelen zijn.