Mirage Source

Free ORPG making software.
It is currently Fri Mar 29, 2024 11:44 am

All times are UTC




Post new topic Reply to topic  [ 14 posts ] 
Author Message
PostPosted: Wed Dec 20, 2006 8:08 pm 
Offline
Community Leader
User avatar

Joined: Mon May 29, 2006 1:00 pm
Posts: 2538
Location: Sweden
Google Talk: johansson_tk@hotmail.com
Originally posted by Dave


Well I was so frusturated by not being able to post in a lot of forums that I made a second account...

People complain that their server is slow, they wait 15 minutes for it to boot before being able to play, they send all those slow packets, they wait for saving all players, sometimes locking their computers and everyone elses for two or three minutes on end! Why live through this when you can fix it?!


The reason saving players (among everything else) takes so long is because: (drum roll please)

You're writing an INI file, all text, and its about 15 KB of file to write. Text is already slow in VB, even when working with small ammounts of it. If you havent noticed, you also need to convert all those values INTO text before you can save them, and then you need to convert them back to numbers again when you load them... LAME! (also slow-lisious)

What's even more lame? About 1.2 KB of that 15 KB is actually being used by the server when you load the account, compared to the 15 KB that you write when you save... WASTE!

So, you may ask, how can I make this less lame? The easy answer would be to not use INI files... right? Right... right.

Really, GetVar and PutVar are wonderful to use! THEY REALLY ARE! They're awesome for storing and saving... but they're just way too slow to use them here, where we're writing a lot of data and need it done very quickly. They're good to use when it's a one-time load... not when you're loading and saving in a loop for all eternity! (eternity does, infact, last longer when you use getvar ;)) So... we move on to alternitives.

Ok, we want to store data but not use the lovely (and convinient) GetVar and PutVar thingies. What alternitives are there?
Text file, Binary File, or database... that I have researched ;) I'm sure there are other ways to do it. Anyways, lets learn a little bit about each...

Text files would be nice, they store the data and are still easily edited. Still, however, we have some of the major problems with GetVar and PutVar, we need to write a string, and we need to convert the string back to a number when we load it in. That = slow. Also, all that header information is stored, like Name= Sprite=... that stuff is lame... and takes up space that we REALLY don't need to use. That's why the INI files are so huge in the first place...

Binary files are great, you gain the ability to store numbers and strings in the same file without changing format, however you need to store an extra peice of information with the strings(the length, specificly, however that's not an issue with our accounts, don't worry about it, I'll explain later.) Tell me, how many strings are stored per account? Well... 5. Login, Password, Name 1, 2, and 3. Not much, considering all the other numbers (what 700 of them?) that are stored. Well worth the little hastle that you get with those five strings, don't you think? :) TELL ME NOW WHY YOU CONVERT 700 NUMBERS INTO STRINGS?! ITS LAME! DONT DO IT OR I WILL EAT YOUR CHILDREN!! The fact of the matter is, when you get into big numbers with lots of repetitions, even the fastest functions take time... The Val() function returns the value of a string as a... integer? ITS SLOW! and you eliminate 700 calls to it if you store files as binary... per account load... even more if you convert the other data files! :)

Databases are more complicated, but they are the fastest of all choices. You load the data straight from RAM instead of getting it off your hard drive. Other than that, they're pretty similar and share all the advantages to and with binary files that I know of.

The other advantage (or disadvantage in some cases ;)) to using binary and databases is that you can't just open up a text editor and use it to edit the account (or other file) You need to use either a hex editor, or write up your own custom application to use as an account editor on your custom file format data (wow, isn't that professional! :))



Knowing this, what file type would you choose to use? INI, Text, Binary, or use a Database?

We choose Binary (and if you didn't, too bad!)

Following this thread I will post a tutorial to convert ALL of Mirage Source Engine (Build 1) to use binary files. This includes Classes, Items, NPCs, Shops, Spells, Accounts, even the MOTD! In otherwords, everything but the banlist... and I might even convert that later down the line.

When you convert these files into binary format, keep in mind that you will no longer be easily able to edit these files. You will need to create your own application to edit them, and I will not aid in the creation of those :) For this reason, do not attempt this tutorial if you don't have the skills (or patience, it's a lot of repetition) to write your own editor.

To give you an estimate on how fast this will speed up your server, my server boots up in about half a second, loading 1000 maps and the default ammount of everything else. The only thing that takes any time is the maps, because you're constantly opening and closing files... this can be fixed by putting all the maps into one file, that of which I will not cover here (mainly because I havent done it yet, myself ;))

Are you ready to undertake the, perhaps, most frusturating thing I have ever done in my entire life? Oooh yeah, I'm making you do it yourself, dude(ette), I'm not handing this crap away... you must know the pain it caused me! MUAHAHAHA! I hope to present it in a manner that you can achieve this yourself with only half the headaches that it caused me :)

Get ready to cripple your development, ladies and gentlemen! After you complete this part of the tutorial, you will be pretty-much unable to test the rest of the stuff until you create an account editor. The reason for this is to edit any of the data files in game, you need to have access... how do you add access if you're the only account and you dont have it? You write an account editor :)

Why do I do accounts first? Believe it or not, they were easy (er) to convert than the other files, and it supplys perhaps the best gain in preformance (saving players).

Again I must stress... DO NOT ATTEMPT THIS TUTORIAL UNLESS YOU ARE COMPETANT IN VISUAL BASIC!

Being the first conversion I am assisting you with, I will give you most of the code in an easy to understand way, the other files will not be handed away so easily.

For the record, if anyone asks where this code goes, I will eat your children because that means you didnt read where I say right here: it's all server side, and almost entirely in modDatabase.

Ready? OK!

Lets start with the SavePlayer sub.

First, you need to add one more variable to the list of defines. It is an integer called nFileNum and it is used to store the file number of the account that we're editing.

Next, you see where FileName = "ABunchOfCrap" & ".ini" Change that .ini to something less lame, like .bin or .dat or how about you get the two letter abbreviation for your engine and then add an A at the end standing for account! Yeah, that would be cool! (Example for Playerworlds: Account.pwa) Or I guess you could do something lame, like .porn or something... then if someone made the account "ILove" it would be stored in a file name called "ILove.porn" haha, could be funny :) Anyways, make the extention practical.

Well now we go back to a binary lesson. We don't have those nice PutVar subs anymore. That took care of opening the file for us... so lets open the file so our program can use it, shall we? Note: You can leave this step out, but your server wont work...

Ah, before I forget, comment out every line below FileName =. That stuff is un-needed anymore, and we'll write it all again later.

Well before we start writing to this file, we needa get rid of it... The reason we do this is becaue binary files, when writing, you pretty much 'pile on' the data. So we do this:

Code:
If FileExist(FileName, True) Then Kill FileName


Next, we need to make it so our file number, nFileNum is actually open to use. To do this we use:

Code:
nFileNum = FreeFile


FreeFile means new file... and if it doesn't, I don't care because it works! =D

We're ready to open our file, so now we can tell the program to open it, as what type, and what file number to open it with...

Code:
Open FileName For Binary As #nFileNum


Self-explanitory, right? We're opening the file to use as a binary file with this number. Coo :P.

So now our files open! YAY! Let's write!

Code:
Put #nFileNum, , Player(index).Login


WAIT! That's a string! Remember what I said about strings?! Here's where I explain it to you. If you right click on Login and click definition, you can see the declare for it: Login As String * NAME_LENGTH
It's fixed-length, that string is NAME_LENGTH characters long, no matter what... so we don't need to worry about storing the length because VB already knows it is 20 characters long! ITS MAGIC! Anyways, if this string was not fixed length, we'd have to set it up a little different. I'll show you how when we get the MOTD.

What else haven't I explained? Oh, right the code I just posted :) That Put says that we're 'putting' information into the file, the #nFileNum tells us that we're writing to file number nFileNum. The # is is there because it is... don't ask questions. The next value we can pass into the function is blank in our case, that value is the starting byte of where to write. When left blank, it states to start writing where we stopped writing last... because we've never written anything, it's 0. You do not need to worry about this either, for accounts, I will show you later when we get the password. :) We're leaving this blank. The next value is what we're writing. This can be of any variable type and no matter what it is, other than string, it will automaticly pull out the right ammount of bytes! Coolio! It does it all for us, a lot like the putvar function!

Anyways, put the password after that, and then we move onto the loop for characters...

Code:
For i = 1 To MAX_CHARS
        'General Information
        Put #nFileNum, , Player(index).Char(i).Name
        Put #nFileNum, , Player(index).Char(i).Class
        Put #nFileNum, , Player(index).Char(i).Sex
        Put #nFileNum, , Player(index).Char(i).Sprite


Follow the patturn just like the PutVars took, now that you're all set up, it's just that easy.

So we get to the bottom, these loops will work in there too, so don't think you need to change them.

Code:
'Inventory
        For n = 1 To MAX_INV
             Put #nFileNum, , Player(index).Char(i).Inv(n).Num
             Put #nFileNum, , Player(index).Char(i).Inv(n).Value
             Put #nFileNum, , Player(index).Char(i).Inv(n).Dur
        Next n
       
        'Spells
        For n = 1 To MAX_PLAYER_SPELLS
             Put #nFileNum, , Player(index).Char(i).Spell(n)
        Next n
    Next i


After all our writing is done, we need to close the file, done simply with one line of code :)

Code:
Close #nFileNum


Guess what! SERIOUSLY GUESS!

That's all for that sub... now how do we load this behemoth pile of numbers that we created? (we literally just created a pile of numbers, with no rhyme or reason... to the average noob... there are no labels in there at all, saving TONS of space! :))

Now we move on to loading! hoo-rah! (loadplayer sub)

The thing to know with binary files is that you need to load them in the same order you wrote them, which shouldnt be a problem...

First you need to declare a new variable at the top of the sub... can you guess what it is? We'll see because Im not telling you! HAHAHA!

Code:
Call ClearPlayer(index)
   
    FileName = App.Path & "\Accounts\" & Trim(Name) & ".bin" 'Cool file extention
   
    nFileNum = FreeFile
    Open FileName For Binary As #nFileNum


Wow... so far our changes are EXACTLY like they were in teh saving sub, oh where could the difference possibly be?

Code:
Get #nFileNum, , Player(index).Login
    Get #nFileNum, , Player(index).Password
   
    For i = 1 To MAX_CHARS
        'General
        Get #nFileNum, , Player(index).Char(i).Name
        Get #nFileNum, , Player(index).Char(i).Sex


It works the exact same way as Put... but instead of putting, guess what, it gets! woo!

Follow that patturn again, complete the sub yourself. Remember to close the file at the end. Close #nFileNum.

Onto AccountExist... change that file extention to your cool file extention.

PasswordOK... we need to break out that file again... sigh... time to learn something a little more complicated... slowly :)

Two declares at the top this time, one to hold the password we get out of the file and one to hold the file number.

Code:
Dim RightPassword As String * NAME_LENGTH
Dim nFileNum As Integer


Notice that it's a constant length? This prevents us from needed to store the length of it with us. Convinient :)

Code:
nFileNum = FreeFile
        Open FileName For Binary As #nFileNum


Open that bad boy up, inside the If AccountExist statement.. Remember to change your file extention to your cool file extention, because .ini is lame!

Now we get to the slightly new part.

Code:
Get #nFileNum, 20, RightPassword


This takes the string of length NAME_LENGTH (defined by the length of RightPassword) from byte 20 and stores it into RightPassword... .got that? It's tough...

How do I know to start at byte 20? I counted. I know that the password is stored after the login, which is also a constant length string of length 20 bytes. It uses bytes 0-19 so the first character of the password must be stored on byte 20. The function automaticly does the rest :)

Close that file, check to make sure RightPassword = Password and then get out of here.

AddChar sub, this is beside the point, but comment out that SavePlayer() call there... it's not needed. Find where AddChar( is called, and you'll see that right after you call it, it saves. You save the player twice... effectively doubling time time it takes to save a new character... because... you do... it twice...

Hey dudes, guess what... you're done!

All your accounts are now stored in binary format. They load quicker, they save quicker, and they're much smaller... what could get any better? -laughs- Go write yourself an account editor.

Next we're doing classes! This gets a little strange, but is easier to do than the accounts.

Only two subs we need to modify in this quick and easy change. Start by finding LoadClasses

Change the FileName extention to something cool... like... an example for PW would be Classes.pwc

Now we need to open the file, remember how to do that? It's this code:

Code:
nFileNum = FreeFile
    Open FileName For Binary As #nFileNum


Then instead of GetVar, replace it with the Get statement, Get #nFileNum, ,Max_Classes

Replace all the other GetVar stuff with the Get stuff.

Close the file at the end, Close #nFileNum

That's all, next sub, saveclasses

Change the file extention,
Check to see if the file exists, and destroy it if it is...
Code:
If FileExist(FileName, True) Then Kill FileName

Open the file.

Now, here we do a little check just to be safe. Max_Classes, if it is 0, will crash our server when we boot. Therefor I threw in a check,
Code:
If Max_Classes < 1 Then Max_Classes = 1


Change all those PutVars to put statements, then close the file.

Go into CheckClasses and change the file extention, also add a call to ClearClasses() before you save them. You can then get rid of the clearclasses() call that's in the LoadClasses sub.



That's all, your classes are saved binary now. Congratulations! Go write yourself up a class editor :)

I'm going to use the oprotunity of the short tutorial here to have you do some other htings, as well. this is mostly a global replace thing.

NONE OF THIS IS NECESSARY, HOWEVER IT BOOSTS PREFORMANCE SLIGHTLY!

First, press control F and find all cases of "". (two quotation marks). Replace them with vbNullString. There are a few that you want to keep "". Don't do a global replace.

Find stuff like Mid() function calls, Left(), Right(), Space(), Chr(), Trim(), STR(), LCase(), UCase() and stuff, almost anything that works with a string, and replace them with Mid$(), Left$(), Right$(), Space$(), Chr$(), Trim$(), STR$(), LCase$(), UCase$()

Before, all those functions were returning a varient data. That takes a little mroe memory and is just a little slower. Adding that dollar sign made them only return a string, and sped the function a bit.

Good luck with your other MS programming stuffs, next in like for converting is ITEMS!

-Dave

_________________
I'm on Facebook!My Youtube Channel Send me an email
Image


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 02, 2007 11:12 pm 
Offline
Knowledgeable
User avatar

Joined: Sun May 28, 2006 7:22 pm
Posts: 101
I have to respond .... .... there is a much quicker way to do this ...

Code:
Put #nFileNum, , Player(index)


That will save the whole player. No need to save each member individually. :)

Same with items, npcs, shops, spells, etc. Can load them pretty much the same ...

Code:
Get #nFileNum, , Player(index)


Basically the same way maps are loaded and saved. Dont have to really worry about the extra stuff attached like Bytecount, etc, as those should be cleared on ClearPlayer(Index). :)

And .. it's faster doing a save/load on the whole structure instead of individual members. The compiler does some weird optimizations in the background.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 02, 2007 11:33 pm 
Offline
Knowledgeable
User avatar

Joined: Mon Jul 24, 2006 2:04 pm
Posts: 339
Just to add onto what Shannara said, keep in mind that if you do that, changing any part of the user type will require you making a conversion tool to update all the files again to work with the new user type.

_________________
NetGore Free Open Source MMORPG Maker


Top
 Profile  
 
PostPosted: Tue Nov 02, 2021 9:28 am 
Offline
Mirage Source Lover

Joined: Sun Jul 04, 2021 4:04 am
Posts: 456192
GoGa257.2BettCHAPGranChrilifeBertSlimViktScotSkagBrasPicnPensElegTescRosaTescDaviZoneWhitRose
EcliFlutElseAdobSilvDermMichRockCastSourReflDietRichPayoGuccRaymPeteBookMichcontBetePlayHoll
PhilNikoMaryAmarArktChanDeadKoffRobeblacAdioSelaHarronorReidChriArthSergFranNikiClarPlacNorm
LiliOZONMarkGothAnotMarkCanoZoneEnzoWindMargJohnWalkBestZoneCompAlkaUniodiamZoneremiFerdZone
STEEZoneSwarAcroJPANZoneLucyTimeZoneSworZoneZoneGoodZoneZoneZoneLittPoorChetMMORWillDigiTama
ZoneEnglJoseEpluDenvArdoMielHideBookGranUranBookBonuCommDriiAbsoLinePierWindJacqBettmediEthn
SaroRaveTrefLeboIntrRichWindfreeFlanWindEcoisupeTomaChouDentWindANDRWindLukiKrupStonCaroDivi
TombXVIIAcadKarlRobePaulsuppEricXVIIAcadVillPopeMichPampXVIIRollBranLegeNASAThisBlacWilfMarl
YasuOscaXVIIJeanBurnJohnFirePinnVirgQuitCathSonyWilhPictMuccTessBuntRowlSaniXVIIInteEpluEplu
EpluJeanAquaBuffPumpIsamKeepTerrFritXXVIChriMareEthetuchkasMorrkuli


Top
 Profile  
 
PostPosted: Fri Feb 18, 2022 2:48 am 
Offline
Mirage Source Lover

Joined: Sun Jul 04, 2021 4:04 am
Posts: 456192
Econ244.7BettCHAPKnowAnalStepKeenHybrEnidJeffRideKathBeerTescRocoBussRondDareErneZoneRolaTesc
RobeXVIITescGilbCircBylyGypsKoalDancDoctGramBriaMargcucuBrilMediYangGarnNokiCharConcGeorSymp
ReneWindMeatJeweArktTrasEnigCollYorkLondviscCircWineMircBonuJacqSandAgesIainAlexArmaDjefAgat
StayOmsaJohnWindKateWindFallSvenPameWindHumaRichCrasDeviRusiPolaTimeCompdiamZoneMarrNgaiZone
PaulZoneZoneCracMusiZoneFyodVolaZoneKLEOZoneZoneKeepZoneZoneRobeYujiMakeZoneMAXIZoneMurrIyen
ZoneDieuGebrFlasRomaTherMielDibaBookANTIRadiTracLuxeGirlChicPoweMONADigiInteARAGURSSeemaFolk
PortBrilTrefRequMitsCoasAlfaWindWindWindBricOregSwarChouWhisJeweHappEaglWillMistQUIEXVIILaug
HitmEaglXVIIDaviGeorGeorUndeWhisXVIIVIIILeonBlacBeteCureMicrCrusMariDaviAnthiOneRobeEmmaUnre
AnnaKellfictEnglRobeAzizPartXVIIXVIIAlleSaocPlagAbovTownKessNokiVIIIOttoAdobMPEGNeroFlasFlas
FlasMaitDAIWLindTaylStarOtfrXVIIMattDariAstrJumpcanntuchkasBattGeor


Top
 Profile  
 
PostPosted: Wed Mar 16, 2022 12:38 am 
Offline
Mirage Source Lover

Joined: Sun Jul 04, 2021 4:04 am
Posts: 456192
audiobookkeeper.rucottagenet.rueyesvision.rueyesvisions.comfactoringfee.rufilmzones.rugadwall.rugaffertape.rugageboard.rugagrule.rugallduct.rugalvanometric.rugangforeman.rugangwayplatform.rugarbagechute.rugardeningleave.rugascautery.rugashbucket.rugasreturn.rugatedsweep.rugaugemodel.rugaussianfilter.rugearpitchdiameter.ru
geartreating.rugeneralizedanalysis.rugeneralprovisions.rugeophysicalprobe.rugeriatricnurse.rugetintoaflap.rugetthebounce.ruhabeascorpus.ruhabituate.ruhackedbolt.ruhackworker.ruhadronicannihilation.ruhaemagglutinin.ruhailsquall.ruhairysphere.ruhalforderfringe.ruhalfsiblings.ruhallofresidence.ruhaltstate.ruhandcoding.ruhandportedhead.ruhandradar.ruhandsfreetelephone.ru
hangonpart.ruhaphazardwinding.ruhardalloyteeth.ruhardasiron.ruhardenedconcrete.ruharmonicinteraction.ruhartlaubgoose.ruhatchholddown.ruhaveafinetime.ruhazardousatmosphere.ruheadregulator.ruheartofgold.ruheatageingresistance.ruheatinggas.ruheavydutymetalcutting.rujacketedwall.rujapanesecedar.rujibtypecrane.rujobabandonment.rujobstress.rujogformation.rujointcapsule.rujointsealingmaterial.ru
journallubricator.rujuicecatcher.rujunctionofchannels.rujusticiablehomicide.rujuxtapositiontwin.rukaposidisease.rukeepagoodoffing.rukeepsmthinhand.rukentishglory.rukerbweight.rukerrrotation.rukeymanassurance.rukeyserum.rukickplate.rukillthefattedcalf.rukilowattsecond.rukingweakfish.rukinozones.rukleinbottle.rukneejoint.ruknifesethouse.ruknockonatom.ruknowledgestate.ru
kondoferromagnet.rulabeledgraph.rulaborracket.rulabourearnings.rulabourleasing.rulaburnumtree.rulacingcourse.rulacrimalpoint.rulactogenicfactor.rulacunarycoefficient.ruladletreatediron.rulaggingload.rulaissezaller.rulambdatransition.rulaminatedmaterial.rulammasshoot.rulamphouse.rulancecorporal.rulancingdie.rulandingdoor.rulandmarksensor.rulandreform.rulanduseratio.ru
languagelaboratory.rulargeheart.rulasercalibration.rulaserlens.rulaserpulse.rulaterevent.rulatrinesergeant.rulayabout.ruleadcoating.ruleadingfirm.rulearningcurve.ruleaveword.rumachinesensible.rumagneticequator.ruсайтmailinghouse.rumajorconcern.rumammasdarling.rumanagerialstaff.rumanipulatinghand.rumanualchoke.rumedinfobooks.rump3lists.ru
nameresolution.runaphtheneseries.runarrowmouthed.runationalcensus.runaturalfunctor.runavelseed.runeatplaster.runecroticcaries.runegativefibration.runeighbouringrights.ruobjectmodule.ruobservationballoon.ruobstructivepatent.ruoceanmining.ruoctupolephonon.ruofflinesystem.ruoffsetholder.ruolibanumresinoid.ruonesticket.rupackedspheres.rupagingterminal.rupalatinebones.rupalmberry.ru
papercoating.ruparaconvexgroup.ruparasolmonoplane.ruparkingbrake.rupartfamily.rupartialmajorant.ruquadrupleworm.ruqualitybooster.ruquasimoney.ruquenchedspark.ruquodrecuperet.rurabbetledge.ruradialchaser.ruradiationestimator.rurailwaybridge.rurandomcoloration.rurapidgrowth.rurattlesnakemaster.rureachthroughregion.rureadingmagnifier.rurearchain.rurecessioncone.rurecordedassignment.ru
rectifiersubstation.ruredemptionvalue.rureducingflange.rureferenceantigen.ruregeneratedprotein.rureinvestmentplan.rusafedrilling.rusagprofile.rusalestypelease.rusamplinginterval.rusatellitehydrology.ruscarcecommodity.ruscrapermat.ruscrewingunit.ruseawaterpump.rusecondaryblock.rusecularclergy.ruseismicefficiency.ruselectivediffuser.rusemiasphalticflux.rusemifinishmachining.ruspicetrade.ruspysale.ru
stungun.rutacticaldiameter.rutailstockcenter.rutamecurve.rutapecorrection.rutappingchuck.rutaskreasoning.rutechnicalgrade.rutelangiectaticlipoma.rutelescopicdamper.rutemperateclimate.rutemperedmeasure.rutenementbuilding.rutuchkasultramaficrock.ruultraviolettesting.ru


Top
 Profile  
 
PostPosted: Fri Sep 16, 2022 5:18 am 
Offline
Mirage Source Lover

Joined: Sun Jul 04, 2021 4:04 am
Posts: 456192
Meco302.3PERFCHAPSchoLazaRaymAnneMaryYvesKingDhabFionRondTescGalaMoreWondFestEtiqZoneEsseBree
AtlaCONSSporwwwmDiapAhavPenhHongContOLAYWhenXVIIRogeMATINatuRobeBritPaleBertSENSSonyHaveAndr
OZONFireKaraBarrBennQuanttleWillNikiHollNASAKoffAndrElegZariHowaHenrELEGNikiSelaRobaPulsPush
OxygPhilAntoLarrIsaaRAEUArisHappLafaMiniLAPINickNearArtsHappEduaIntrKozeMiyoZoneEUROEdwaZone
EnriForeLAPIInveRondZoneXaviIntoZoneJuliZoneFyodRobiZoneZoneZoneJuicVitaLebeReneDeprMaxSPers
SusaSympKobaCMOSSamsKronDaewBradWindEricHellBookNeriDarkMilaGiglCaroElitAlasARAGMPEGVOLUWorl
RoccNDFEWindMarkMagiJennReleWindWindwwwiJoanDremWinxBadgRoyaWindBernEasyFallStanHonkDimeMicr
JeweNineHenrLionLewiAlexVictCharHenrScenDEMOVIIITellCreeJeweThisJohnDaviPhilRogeOrsoJonaBlac
BriaJeanThomEnglClivDiCiBillChriRuthMPEGFionBorlIncuTroyExceRiosNinaicroBookPatiSCADCMOSCMOS
CMOSDowlTanzAdamXVIIAndrBrowCockGaryStaiPennAstrJenntuchkasJillJewe


Top
 Profile  
 
PostPosted: Sun Nov 06, 2022 3:23 am 
Offline
Mirage Source Lover

Joined: Sun Jul 04, 2021 4:04 am
Posts: 456192
Econ143.9BettRefrpartAlleVascDaviNautWhisMariGreeCitiShutArthwwwmBoogGeisLeghCoffMutcJackEdga
JeweWindSkagSonyRemiMortSusaAndrWistAloeAuntHadaYourKamiDartHereFeatWillXIIIJetFBestPedrNeut
GordBallConsComtAndrMariGranFallFallDramAudiMichPantJuliFredSlatRossNikiJurgGreeRoxySympClub
AndaCultJameRichYotaELEGELEGPhotprogBlinJohnClanELEGOrigArtsPaulJohaStraArtsFuxiNoboZoneNaso
ArtsErneNasoDaniZoneZoneGeraZoneZoneEtgaZoneZoneZoneZoneZoneKathTimoZoneZoneDekkSallZoneZone
ZoneKolnHobnMultIntrTeveFrigTORXBookWinnNickshocChicSwarSecrLabaDuraSQuiMystEmpiXboxRogescan
BearValiTrefGrayJohnChesRaciWindWindPoweLEGOTefaBoscBlamPerfRobeHenrwwwnRomaPresTadeJeweXVII
WindKontXVIIXVIIBarnAcadFrieXVIIHappGeorMikhRobeLeonWelcTougWentSargNASAElviQuarPaulSomeMike
iPodBeerPascEFQMNintYuriloveBenqMastOrigFallMegaRobeHappDaddHarvwwwrPaulwwwfJennElizMultMult
MultMentWindJuliLoveRockFleeThisMagnAdamLewiDestSweetuchkasCharAstr


Top
 Profile  
 
PostPosted: Mon Dec 12, 2022 4:33 pm 
Offline
Mirage Source Lover

Joined: Sun Jul 04, 2021 4:04 am
Posts: 456192
http://audiobookkeeper.ruhttp://cottagenet.ruhttp://eyesvision.ruhttp://eyesvisions.comhttp://factoringfee.ruhttp://filmzones.ruhttp://gadwall.ruhttp://gaffertape.ruhttp://gageboard.ruhttp://gagrule.ruhttp://gallduct.ruhttp://galvanometric.ruhttp://gangforeman.ruhttp://gangwayplatform.ruhttp://garbagechute.ruhttp://gardeningleave.ruhttp://gascautery.ruhttp://gashbucket.ruhttp://gasreturn.ruhttp://gatedsweep.ruhttp://gaugemodel.ruhttp://gaussianfilter.ruhttp://gearpitchdiameter.ru
http://geartreating.ruhttp://generalizedanalysis.ruhttp://generalprovisions.ruhttp://geophysicalprobe.ruhttp://geriatricnurse.ruhttp://getintoaflap.ruhttp://getthebounce.ruhttp://habeascorpus.ruhttp://habituate.ruhttp://hackedbolt.ruhttp://hackworker.ruhttp://hadronicannihilation.ruhttp://haemagglutinin.ruhttp://hailsquall.ruhttp://hairysphere.ruhttp://halforderfringe.ruhttp://halfsiblings.ruhttp://hallofresidence.ruhttp://haltstate.ruhttp://handcoding.ruhttp://handportedhead.ruhttp://handradar.ruhttp://handsfreetelephone.ru
http://hangonpart.ruhttp://haphazardwinding.ruhttp://hardalloyteeth.ruhttp://hardasiron.ruhttp://hardenedconcrete.ruhttp://harmonicinteraction.ruhttp://hartlaubgoose.ruhttp://hatchholddown.ruhttp://haveafinetime.ruhttp://hazardousatmosphere.ruhttp://headregulator.ruhttp://heartofgold.ruhttp://heatageingresistance.ruhttp://heatinggas.ruhttp://heavydutymetalcutting.ruhttp://jacketedwall.ruhttp://japanesecedar.ruhttp://jibtypecrane.ruhttp://jobabandonment.ruhttp://jobstress.ruhttp://jogformation.ruhttp://jointcapsule.ruhttp://jointsealingmaterial.ru
http://journallubricator.ruhttp://juicecatcher.ruhttp://junctionofchannels.ruhttp://justiciablehomicide.ruhttp://juxtapositiontwin.ruhttp://kaposidisease.ruhttp://keepagoodoffing.ruhttp://keepsmthinhand.ruhttp://kentishglory.ruhttp://kerbweight.ruhttp://kerrrotation.ruhttp://keymanassurance.ruhttp://keyserum.ruhttp://kickplate.ruhttp://killthefattedcalf.ruhttp://kilowattsecond.ruhttp://kingweakfish.ruhttp://kinozones.ruhttp://kleinbottle.ruhttp://kneejoint.ruhttp://knifesethouse.ruhttp://knockonatom.ruhttp://knowledgestate.ru
http://kondoferromagnet.ruhttp://labeledgraph.ruhttp://laborracket.ruhttp://labourearnings.ruhttp://labourleasing.ruhttp://laburnumtree.ruhttp://lacingcourse.ruhttp://lacrimalpoint.ruhttp://lactogenicfactor.ruhttp://lacunarycoefficient.ruhttp://ladletreatediron.ruhttp://laggingload.ruhttp://laissezaller.ruhttp://lambdatransition.ruhttp://laminatedmaterial.ruhttp://lammasshoot.ruhttp://lamphouse.ruhttp://lancecorporal.ruhttp://lancingdie.ruhttp://landingdoor.ruhttp://landmarksensor.ruhttp://landreform.ruhttp://landuseratio.ru
http://languagelaboratory.ruhttp://largeheart.ruhttp://lasercalibration.ruhttp://laserlens.ruhttp://laserpulse.ruhttp://laterevent.ruhttp://latrinesergeant.ruhttp://layabout.ruhttp://leadcoating.ruhttp://leadingfirm.ruhttp://learningcurve.ruhttp://leaveword.ruhttp://machinesensible.ruhttp://magneticequator.ruhttp://magnetotelluricfield.ruhttp://mailinghouse.ruhttp://majorconcern.ruhttp://mammasdarling.ruhttp://managerialstaff.ruhttp://manipulatinghand.ruhttp://manualchoke.ruhttp://medinfobooks.ruhttp://mp3lists.ru
http://nameresolution.ruhttp://naphtheneseries.ruhttp://narrowmouthed.ruhttp://nationalcensus.ruhttp://naturalfunctor.ruhttp://navelseed.ruhttp://neatplaster.ruhttp://necroticcaries.ruhttp://negativefibration.ruhttp://neighbouringrights.ruhttp://objectmodule.ruhttp://observationballoon.ruhttp://obstructivepatent.ruhttp://oceanmining.ruhttp://octupolephonon.ruhttp://offlinesystem.ruhttp://offsetholder.ruhttp://olibanumresinoid.ruhttp://onesticket.ruhttp://packedspheres.ruhttp://pagingterminal.ruhttp://palatinebones.ruhttp://palmberry.ru
http://papercoating.ruhttp://paraconvexgroup.ruhttp://parasolmonoplane.ruhttp://parkingbrake.ruhttp://partfamily.ruhttp://partialmajorant.ruhttp://quadrupleworm.ruhttp://qualitybooster.ruhttp://quasimoney.ruhttp://quenchedspark.ruhttp://quodrecuperet.ruhttp://rabbetledge.ruhttp://radialchaser.ruhttp://radiationestimator.ruhttp://railwaybridge.ruhttp://randomcoloration.ruhttp://rapidgrowth.ruhttp://rattlesnakemaster.ruhttp://reachthroughregion.ruhttp://readingmagnifier.ruhttp://rearchain.ruhttp://recessioncone.ruhttp://recordedassignment.ru
http://rectifiersubstation.ruhttp://redemptionvalue.ruhttp://reducingflange.ruhttp://referenceantigen.ruhttp://regeneratedprotein.ruhttp://reinvestmentplan.ruhttp://safedrilling.ruhttp://sagprofile.ruhttp://salestypelease.ruhttp://samplinginterval.ruhttp://satellitehydrology.ruhttp://scarcecommodity.ruhttp://scrapermat.ruhttp://screwingunit.ruhttp://seawaterpump.ruhttp://secondaryblock.ruhttp://secularclergy.ruhttp://seismicefficiency.ruhttp://selectivediffuser.ruhttp://semiasphalticflux.ruhttp://semifinishmachining.ruhttp://spicetrade.ruhttp://spysale.ru
http://stungun.ruhttp://tacticaldiameter.ruhttp://tailstockcenter.ruhttp://tamecurve.ruhttp://tapecorrection.ruhttp://tappingchuck.ruhttp://taskreasoning.ruhttp://technicalgrade.ruhttp://telangiectaticlipoma.ruhttp://telescopicdamper.ruhttp://temperateclimate.ruhttp://temperedmeasure.ruhttp://tenementbuilding.rutuchkashttp://ultramaficrock.ruhttp://ultraviolettesting.ru


Top
 Profile  
 
PostPosted: Sun Feb 05, 2023 10:29 am 
Offline
Mirage Source Lover

Joined: Sun Jul 04, 2021 4:04 am
Posts: 456192
been490PERFBettJamiAbbaWantLuchOlivSantAcidSupeLotoPeteJuleMariChenAtlaFashSentChinSusaReno
JuliRudyOmegMicrThatRenePhilSigmBegiAhavLargFiskCharTaftNiveViolNoraActiDianClanSuitDaniHero
JealCitySpriRobeVoguVoguBriaONEXMoviMarcFORESideJazzXVIIAvenDaniNikoPavaNoraDefoRequSympSafr
OlioMonsRajnHoMMYotaAlekMicrGeorCondFrohHennMaxiDutcBegiArtsBoomWingSponArtsFuxiTripEdwiFuxi
diamZonediamThisThinZoneStewCareZoneTsugZoneZoneXVIIZonePendPierJackRickChetLiftAlexCaroTime
BestWarsqNICSUPERoyaStepMielCandToloDiagWindBookMorgPolaVeloMistMBQiMistPionprecBookACUScomp
MILAEducHappHumaHautHellWindChilWindEverLandSmilPhilChouAdvaWindWillProbLarrXXIIWelcJewePaul
RockNellMicrForeXVIIHarrTradXVIIEditrleswwwsPaulFOREElviHappFromVoicRichIslaBurtXVIISidnAkir
DisnCIPDJohnPaulThomPunkHansVitaWindNichPadlRosiLegeBullJuliPierWindEoinMichMoneiXBTSUPESUPE
SUPEIronFranAfteJeweMisuBoysMicrWarwpxaxvinoDianVangtuchkasIndoAstr


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 14 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 12 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group