-
[Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Hello everyone, It's been a while since i have made an update to Zen Launcher (Beast Launcher) and this one was compiled last year and planned to share it ( Updated Version )
Preview:
http://i.imgur.com/SoCngTJ.png
http://i.imgur.com/T6UZsDY.png
More Previews here: Beast-Launcher - Album on Imgur
Informations (New):
Version: 6.0.1
Source-Codes Stable:
https://gitlab.com/coresec/BeastLauncher/tree/master (Master)
https://gitlab.com/coresec/BeastLaun...ee/performance (Performance Branch)
Created with Python, Supports Transparent Splash image
and Auto-Update from your Website also every time players starts with launcher it detects if theres a new version, and if so it will prompt the updater and will update it.
100% Clean and Open-Source, also supports an anti-hack built-in but not planning to release it yet.
Features:
Splash (Enable/Disable)
Server Name (Can be Disabled)
Web view Slider (Images with Link)
Web view News
Buttons with Links
Options Tab (Resolutions Setting)
Editable Messages in Contact Us Tab
Ease of Set-up
Auto-Updater
Guide:
Download the Launcher files:
Link: https://mega.nz/#!ksJE1QyL!VbBpcIw1q...lp3AOh_dPxVDnM
Unzip in into the root of your Client folder (do not rename 'Updater.exe' and 'Launcher.exe')
Download files for the Updater:
Link: https://mega.co.nz/#!IoowGb4S!T3taY0...lxBgh7-4fBR5xQ
Updater Setup:
Unzip the file into your Web root,
If you are using Xampp please move the 'csupdater' and 'SlidesAndNews' folder into your htdocs (Easier for you to understand the whole setup)
examples:
C:/xampp/htdocs/csupdater ( contains the updater version number and Zip files)
- LatestVersion.txt (Edit if you wish to make a new Version, be sure that it is higher by 1 )
---- Version (FOLDER)
------ 1.0 (FOLDER)
---------- 1.0.zip (Zip file that contains the whole file you wish to replace on players)
so if you change the number in LatestVersion.txt (lets say 1.0)
the Launcher will go to 1.0 directory and download the 1.0.zip (ZIP FILE)
C:/xampp/htdocs/SlidesAndNews ( contains the slider and news on launcher )
If you are planning to host the whole Updater files onto a different host please always make sure that "csupdater" and "SlidesAndNews" folder are in ROOT DIRECTORY or somewhere you remember the path
Settings Editing Guide (Includes Updater)
Go to your Settings folder open file named Main
Setting File
- Name
None if you do not like any name, Or change it to Anything - Style
0 or 1 (Useless.) - Executable
default: main.exe or can be anything if you renamed the original main.exe - Icon
default: Resource/Invictuz.png or anything that fits on your likings ;) - Info
ex. "www.thisislink, this is the information etc. etc." (SEPERATED by Comma) - Splash
Value is: True or None, Path of Splash Image ex. "True, MySplashFolder/Splash.png" - News
URL to your "/SlidesandNews/news.aspx" ex: NAME OF SERVER - Slider
URL to your "SlidesandNews/slides/slides.aspx ex: No Name Launcher's Slider - smslink
Any Link - sociallink
Any Link - votelink
Any Link - smslink
Any Link - webshoplink
Any Link
OPTION for UPDATER - Updater
The Link of which the "csupdater" folder uploaded (Check the Path!!)
example: http://hacore.sourceforge.net (if you will check here: http://hacore.sourceforge.net/ csupdater / ) it will Work. - Version
ex: 3.2, 3.22, 0.5, 213 (Be sure that this one is Equal or Less than the Web Version)
It's a kinda long Guide so yah just wish ya a have a good luck.
Please Like if you do :P and Leave a feed back if you have a problem and have some question related with my post.
Video Guide (Long XD )
https://www.youtube.com/watch?v=ih8d...ature=youtu.be
Lot's of Users PM'ed me how to Compile the source into .EXE
Code:
1. Download Python 2.7, https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi
- On installation please check the "Add to Path"
2. Download PyQt4:
http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x32.exe
3. Download PyInstaller
Open CMD.exe, Type this command:
pip install pyinstaller (Close the CMD Afterwards)
4. Open CMD.exe and type these command
pyinstaller -y -F --windowed --icon="Settings\CSImages\icon.ico" --version-file="version.txt" --upx-dir="upx" -p "C:\Python27\Lib\site-packages\PyQt4" Launcher.py
Warning:
--upx makes your .exe generated code unreadable (Packed exe)
Replace C:\Python27 with your Python directory.
Special Thanks to:
Code:
Zozeri
TrickRoye
Maddox
Patches:
Code:
- Removes .Zip files automatically when Launcher.exe starts (thanks Zozeri)
- (6.0.1) Built-in updater (Zip remover, Version Updater, and Multi version updater)
-
Re: MuOnline Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-Upda
bro do you have a clean slides.aspx and news.aspx?
-
Re: MuOnline Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-Upda
Source-Code,please share.
-
Re: MuOnline Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-Upda
Quote:
Originally Posted by
clerigz
bro do you have a clean slides.aspx and news.aspx?
Sorry it isnt included with the Client files but theres a link on top: (just edit the new.aspx etc... under the SlidesandNews folder) https://mega.co.nz/#!IoowGb4S!T3taY0...lxBgh7-4fBR5xQ
-
Re: MuOnline Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-Upda
Quote:
Originally Posted by
mingxin
Source-Code,please share.
Full Source-codes (Launcher and Updater)
https://gitlab.com/coresec/BeastLaun...ee/performance (Performance Branch for Speed Improvements)
https://gitlab.com/coresec/BeastLauncher/tree/master (Master Fast Version)
Feel free to Contribute to the source code and i will add you to developers list.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
@onecore
Thank you for this release!
However I think either I am doing something wrong or its slightly buggy,
The Launcher takes over a minute to open and when I update it will save the zip to my client folder and only after a minute or so it will extract it,
but it doesn't seem to be deleting the zip after this is done.
Anyway my main problem is the delay when opening it initially, it shouldn't take so long. Any ideas?
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
zozeri
@
onecore
Thank you for this release!
However I think either I am doing something wrong or its slightly buggy,
The Launcher takes over a minute to open and when I update it will save the zip to my client folder and only after a minute or so it will extract it,
but it doesn't seem to be deleting the zip after this is done.
Anyway my main problem is the delay when opening it initially, it shouldn't take so long. Any ideas?
Hello Zozeri you are welcome, Launcher is Fast except it needs a stable connection sometimes (Getting Latest version from the Web, and Downloading Zip) I have updated the link and source (Changes here) and added some funcs to remove the .ZIP files
Download (Updated EXEs): https://mega.co.nz/#!AwQUlYZK!cSS91e...yQJfFsxVSKMCtE
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
Hi onecore, Awesome update it seems to launch much faster now.
The launcher works perfectly when there is a newer version (patch) on the server, the updater functions correctly and downloads the the latest patch, unzips it but still for some reason it doesn't remove the zip file - not such a big deal.
Although there is a major issue when there is no newer update on the website, the launcher still takes you to the updater instead of stating that there is no new update and start the game. (the previous version of the launcher didn't have this issue)
At this point the updater shows the attached (image below) and remains like that indefinitely
http://img.photobucket.com/albums/v7...psnozohsrc.jpg
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
very nice launcher ^_^
Thank your for sharing
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
zozeri
Hi onecore, Awesome update it seems to launch much faster now.
The launcher works perfectly when there is a newer version (patch) on the server, the updater functions correctly and downloads the the latest patch, unzips it but still for some reason it doesn't remove the zip file - not such a big deal.
Although there is a major issue when there is no newer update on the website, the launcher still takes you to the updater instead of stating that there is no new update and start the game. (the previous version of the launcher didn't have this issue)
At this point the updater shows the attached (image below) and remains like that indefinitely
http://img.photobucket.com/albums/v7...psnozohsrc.jpg
Hi Zozeri thanks for the report, I just checked the latest compiled and everything's working fine, And as I remember the feature i have added to delete the whole .zip file only works on the Second run of the Launcher, Please check your Config files, Also there is a limitation of versioning, always make it 0.1, so let's say your current version is 3.2 and your next version must be 3.3 (always + 0.1) and i have found out that this is the good way of making the whole patches available for your old client which versions are left behind.
like The Latest version is 3.3 and I am using 3.0 (This means the Launcher will update in 3 times until it reaches the 3.3),
Thanks and please check your config as I am guessing its the cause of the problem. :)
Regards, Mark.
- - - Updated - - -
Quote:
Originally Posted by
samsunggon
very nice launcher ^_^
Thank your for sharing
Walang Anuman po at Salamat din :D:):
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
Hi Zozeri thanks for the report, I just checked the latest compiled and everything's working fine, And as I remember the feature i have added to delete the whole .zip file only works on the Second run of the Launcher, Please check your Config files, Also there is a limitation of versioning, always make it 0.1, so let's say your current version is 3.2 and your next version must be 3.3 (always + 0.1) and i have found out that this is the good way of making the whole patches available for your old client which versions are left behind.
like The Latest version is 3.3 and I am using 3.0 (This means the Launcher will update in 3 times until it reaches the 3.3),
Thanks and please check your config as I am guessing its the cause of the problem. :)
Regards, Mark.
- - - Updated - - -
Walang Anuman po at Salamat din :D:):
Hi onecore thank you for the reply,
Its quite late here so I wont get a chance to test this but will definitely it out in the morning. :thumbup1:
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
zozeri
Hi onecore thank you for the reply,
Its quite late here so I wont get a chance to test this but will definitely it out in the morning. :thumbup1:
No problem bro, just let me know if theres a problem i can help you with :P at your service lol.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
No problem bro, just let me know if theres a problem i can help you with :P at your service lol.
i notice in this file have 2 exe? Launcher.exe & Updater.exe is it posible to make it 1 exe only?
thanks :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Hi Maddox, Hmm it is but it needs some tweaks on its source and I will do it on my free time (Sorry as i am a busy guy and have to work everyday lol) I will update this post as soon as ive merged these 2 exes.
Cheers, Mark.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Hi,
First thing - very very nice launcher!
But I need help in something. When there is new version, you click to check version / start the game and it will download the zip... but it won't get the files until you tick again start game. Can you do so it will extract the files after it finishes to download and not only when you press start the game in the updater? Or tell me where I can find it in the source and update it.
Thanks.
Edit:
Hi again,
In addition I checked about several updates and got a problem. For example:
The server is on 1.4 version.
The client is on 1.1 version.
Now when the client is updatding, it need to download 1.2, 1.3. and 1.4 and unzip them in the same order.
But when I tested it, it always download only one update and unzip it. Can you check it out and change it so it will update all the updates and not only 1?
Thanks again.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
TrickRoye
Hi,
First thing - very very nice launcher!
But I need help in something. When there is new version, you click to check version / start the game and it will download the zip... but it won't get the files until you tick again start game. Can you do so it will extract the files after it finishes to download and not only when you press start the game in the updater? Or tell me where I can find it in the source and update it.
Thanks.
Edit:
Hi again,
In addition I checked about several updates and got a problem. For example:
The server is on 1.4 version.
The client is on 1.1 version.
Now when the client is updatding, it need to download 1.2, 1.3. and 1.4 and unzip them in the same order.
But when I tested it, it always download only one update and unzip it. Can you check it out and change it so it will update all the updates and not only 1?
Thanks again.
Thanks for your message! and for your first post It's not normal and the latest version works just the way you want like doenload and unzip, and for the updated post of yours it is really like that like version by version, I am gonna patch it and make it all in one update, Thanks for the suggestion TrickRoyal.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
Thanks for your message! and for your first post It's not normal and the latest version works just the way you want like doenload and unzip, and for the updated post of yours it is really like that like version by version, I am gonna patch it and make it all in one update, Thanks for the suggestion TrickRoyal.
First thing, Thanks!
You are talking on the same version that there is on the first message of this thread? The files unzip only after you press "start game" on the updater and not unzip after it download automaticly. I tried to fix it but I had problem with to set py to exe (alot of errors, missing libs or something.... fix 1, 10 pop up lol)
Another problem that I checked. I don't know if it was your purpose, but take an example.
If my version is 1.2, or say 1.159, and I want to update to 2.0, the Updater stucks and don't update to 2.0.
See if you can fix it or if it wasn't your goal. Maybe I can set new Main setting and to update it handly to 2.0 with patch of 1.X and then to go on with 2.0 version.
Just saying :P
Please inform me when you fix the updater to update all the last unupdated versions :)
Again thanks buddy
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
TrickRoye
First thing, Thanks!
You are talking on the same version that there is on the first message of this thread? The files unzip only after you press "start game" on the updater and not unzip after it download automaticly. I tried to fix it but I had problem with to set py to exe (alot of errors, missing libs or something.... fix 1, 10 pop up lol)
Another problem that I checked. I don't know if it was your purpose, but take an example.
If my version is 1.2, or say 1.159, and I want to update to 2.0, the Updater stucks and don't update to 2.0.
See if you can fix it or if it wasn't your goal. Maybe I can set new Main setting and to update it handly to 2.0 with patch of 1.X and then to go on with 2.0 version.
Just saying :P
Please inform me when you fix the updater to update all the last unupdated versions :)
Again thanks buddy
Haha thats the best idea to do to patch the Main (file) setting along with your update if you want to skip some of your updates, I will make a patch with its source but right now i am currently busy and has so many plans with this launcher :(
> to compile the source to exe
- Download Python (From python.org) and choose version 2.7.x (On Installation choose 'Add to Path')
- Use easy_install (Remote package Installer) and download PyInstaller, Command: easy_install PyInstaller
- Install PyQt4 (Make sure that the architecture (64,32bit) is the same as your Python version
finally:
use this build command to compile it to EXE
https://gitlab.com/coresec/BeastLauncher/blob/master/build_comm.txt
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
any news sir onecore about merging 2 exe into 1?
thanks this is great :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
I need some help to use the python if someone can post a thank tutorial.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
@Maddox I will start to recode it tommorow, So if you have any suggestion feel free bro. (:
I will also remove the Copyright so you can add your own.
@Alan hmm download Python from (Welcome to Python.org)
Install these packages needed (Dependencies) in Ordered
- setuptools
- PyQt4
- PyInstaller (or Py2exe but will give you a hard time to compile it to exe)
and theres a good site to learn python, visit Codeacademy (Google It) i dont know the full website domain.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
onecore I notice that config for checking update version is you need to change from time to time can you make it like in mu.exe updater
Mu.exe Updater is detecting new version in version.wvd
"00.01.01"
"00.01.02"
"00.01.03"
"00.01.04"
Client only update if above version not yet updated and update is per batch not all in one :)
hope you can make it like thats so update would not too big :) thanks.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Yes thats what i would like to update as well and planning to add the whole updater bundled with the launcher and just add a loading bar (It is really seperated with a purpose as my friend requested for BeastMU Online)
- Thanks and will let you know about the update.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
Yes thats what i would like to update as well and planning to add the whole updater bundled with the launcher and just add a loading bar (It is really seperated with a purpose as my friend requested for BeastMU Online)
- Thanks and will let you know about the update.
wow i cant wait for that for now im using your updater but in regards i have problem in updating because i update per day i think and im planning to change to mu.exe updater for now but if you release the new revision then i should back in your updater :)
and btw maybe you can make a DLL to hook in main.exe so your launcher with updater will Run first if they click Main.exe :)
BTW maybe you can make it the launcher will force update if found newer version :)
thanks a lot your very helpful :)
God Bless :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
for the DLL i will try :) Thanks bro and God bless to you too. (i forgot that the old Updater.exe of this launcher Which was version 5.0 works fine with updating version by version until the latest ones)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
And also all updates that already extracted in client are also has a copy .zip save in client folder :) - it should be deleted after updating :)
see image :)
thanks :)
https://forum.ragezone.com/cache.php...m%2Fwv49s2.png
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Please add 7Z Support for Updater
LZMA2 much better for file size)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
alex26
Please add 7Z Support for Updater
LZMA2 much better for file size)
I will try to add it as soon as the next version has released :)
- regards.
- - - Updated - - -
for Deleting the downloaded (zipfile) theres a patch for it already and you'll see it on the first thread :)
for 2 in 1 exe, i have decided to remove the seperate exe file and add the updater (BAR) inside the Launcher.exe
http://i.imgur.com/MV6vscD.png i have tried this one already before but gives me alot of bugs thats why i moved into 2 seperate file lol, but ya it was 2 years ago.
[/QUOTE]
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
@onecore xamp which version you use friend can share the same
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
Alan Andrade
@
onecore xamp which version you use friend can share the same
I Use 1.7.0 :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
@onecore I would like to share with us?
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
I will try to add it as soon as the next version has released :)
- regards.
- - - Updated - - -
for Deleting the downloaded (zipfile) theres a patch for it already and you'll see it on the first thread :)
for 2 in 1 exe, i have decided to remove the seperate exe file and add the updater (BAR) inside the Launcher.exe
https://forum.ragezone.com/cache.php...%2FMV6vscD.png i have tried this one already before but gives me alot of bugs thats why i moved into 2 seperate file lol, but ya it was 2 years ago.
[/QUOTE]
have you fix all bugs bro? when it release?
thanks :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
I am currently working on it right now :) with the All versions in one patch (e.g Update all 5 unpatched versions in One update)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
I am currently working on it right now :) with the All versions in one patch (e.g Update all 5 unpatched versions in One update)
nice ill wait for that :)
thanks.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Thanks Maddox
New version 6.0.1
- Added Multiple versions Patcher (Accurate)
- Now the version settings is like a list
- Updater is now Built-In (Also Fast, idk about your connection)
- Force to update the Client (from 'Start Game' button)
New look:
https://forum.ragezone.com/cache.php...%2FSoCngTJ.png
Source-codes:
https://gitlab.com/coresec/BeastLaun...er/Launcher.py
Download binary (compiled):
https://mega.nz/#!ksJE1QyL!VbBpcIw1q...lp3AOh_dPxVDnM
@Maddox
- - - Updated - - -
i've tested it but not everything so please feel free lol (im so late at work now bye.)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
Lol its Perfect Better than before... :) thanks a lot God Bless :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
Maddox
Lol its Perfect Better than before... :) thanks a lot God Bless :)
You are welcome bro and i have added you to the list of people who made this launcher better :P
God bless.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
One more thing Bro :) maybe you can Remove the "Check for Update Button" because that button is already migrated to Start Button :) thanks. :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
Maddox
One more thing Bro :) maybe you can Remove the "Check for Update Button" because that button is already migrated to Start Button :) thanks. :)
Soon to update :) also i forgot to remove the Copyright thingy :D
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
onecore
Soon to update :) also i forgot to remove the Copyright thingy :D
Waiting.....
hehehe God Bless Bro :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
onecore Final Release bro? :D
Thanks.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Hmm could be (: but i am trying to port the Antihack.py to C/C++ so it could import with Main.exe, also planning add a built-in registration but i think it would cause a security problem (:
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
-
Re: MuOnline Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-Upda
nice release, but why
Quote:
BeastErr
Unabe to parse and load version.
Quote:
[BeastUpdater]
updater =
http://Mydomain <--- here
version = 3.3
autoclose = 0
already try it with xamp and IIS webserver but its the same probem.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
because your updater link is wrong. write there the folder where your update files are staying. if you put in htdocs then just write down your servers link
if you extract them in another folder as example htdocs/updater then write -> '''''http://www.yoursite.com/updater'''' :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Hi I'm trying to edit the images the launcher but when you run the launcher does not change it is still the only change is to dw.
Screenshot by Lightshot
Since I can edit?
--------------------------------------------------------------------------------------------------------------------------------------------------
self.MuLogoTop.setPixmap(QtGui.QPixmap(_fromUtf8(":/images/Settings/CSImages/reg_logo.png")))
fix: self.MuLogoTop.setPixmap(QtGui.QPixmap(_fromUtf8("Settings/CSImages/reg_logo.png")))
Deleter all: :/images
someone me plz can compile to fix because I can not copilar.
Launcher.py
Code:
# -*- coding: utf-8 -*-
# CoreSEC Softwares, Ca
# Mark Anthony Pequeras
# Licensed Under MIT License
# InvictuzMU/BeastMU Online Launcher
# www.coresecsoftware.com/python/BeastLauncher
from PyQt4 import QtCore, QtGui
from subprocess import Popen
import urllib, urllib2
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(object):
def __init__(self):
# Options Cache for GUI Objects
import ConfigParser
try:
_file = ["Settings/Main","BeastLauncher"]
_Parser = ConfigParser.ConfigParser()
_Parser.read(_file[0])
except:
self.BeastException(title="OptionsError",message="Unable to Load Options!")
self.Getter = lambda s,v: _Parser.get(s,v) if True else None
self.Setter = lambda s,o,v: _Parser.set(s,o,v)
self.RemCurZip()
def RemCurZip(self,version=None):
import os
from_opt = self.Getter("BeastUpdater","version")
_n = str(from_opt)+'.zip'
try:
os.remove(_n)
except:
pass
def setupUi(self, Form):
QtCore.QCoreApplication.addLibraryPath('coresec')
self.booster = QtGui.qApp
Form.setObjectName(_fromUtf8("Form"))
Form.resize(906, 480)
Form.setMinimumSize(QtCore.QSize(906, 480))
Form.setMaximumSize(QtCore.QSize(906, 480))
Form.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
Form.setStyleSheet(_fromUtf8("background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #26293B , stop: 1 #333751);"))
self.OrangeBar = QtGui.QPlainTextEdit(Form)
self.OrangeBar.setEnabled(False)
self.OrangeBar.setGeometry(QtCore.QRect(70, 20, 641, 311))
self.OrangeBar.setStyleSheet(_fromUtf8("border-radius: 15px 33px 22px 33px;\n"
"border: 3px outset #333751;\n"
"background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #26293B , stop: 1 #26293B);"))
self.OrangeBar.setObjectName(_fromUtf8("OrangeBar"))
self.SMScredit = QtGui.QLabel(Form)
self.SMScredit.setGeometry(QtCore.QRect(720, 210, 141, 91))
self.SMScredit.setStyleSheet(_fromUtf8("background: transparent;\n"
""))
self.SMScredit.setText(_fromUtf8(""))
self.SMScredit.setPixmap(QtGui.QPixmap(_fromUtf8("Settings/CSImages/smscreds.jpg")))
self.SMScredit.setObjectName(_fromUtf8("SMScredit"))
self.label_3 = QtGui.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(720, 310, 131, 51))
self.label_3.setStyleSheet(_fromUtf8("background: transparent;"))
self.label_3.setText(_fromUtf8(""))
self.label_3.setPixmap(QtGui.QPixmap(_fromUtf8("Settings/CSImages/webshop.jpg")))
self.label_3.setScaledContents(True)
self.label_3.setObjectName(_fromUtf8("label_3"))
self.MuLogoTop = QtGui.QLabel(Form)
self.MuLogoTop.setGeometry(QtCore.QRect(350, 0, 201, 71))
self.MuLogoTop.setStyleSheet(_fromUtf8("background: transparent;"))
self.MuLogoTop.setText(_fromUtf8(""))
self.MuLogoTop.setPixmap(QtGui.QPixmap(_fromUtf8("Settings/CSImages/reg_logo.png")))
self.MuLogoTop.setObjectName(_fromUtf8("MuLogoTop"))
self.redplus = QtGui.QLabel(Form)
self.redplus.setGeometry(QtCore.QRect(680, 30, 16, 16))
self.redplus.setStyleSheet(_fromUtf8("background: transparent;"))
self.redplus.setText(_fromUtf8(""))
self.redplus.setPixmap(QtGui.QPixmap(_fromUtf8("Settings/CSImages/arrow.gif")))
self.redplus.setObjectName(_fromUtf8("redplus"))
self.WebshopButton = QtGui.QPushButton(Form)
self.WebshopButton.setGeometry(QtCore.QRect(720, 310, 131, 51))
self.WebshopButton.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
self.WebshopButton.setStyleSheet(_fromUtf8("border-image: url(Settings/CSImages/round.gif);\n"
"background: transparent;"))
self.WebshopButton.setText(_fromUtf8(""))
self.WebshopButton.setObjectName(_fromUtf8("WebshopButton"))
self.SMSCreditsButtons = QtGui.QPushButton(Form)
self.SMSCreditsButtons.setGeometry(QtCore.QRect(720, 220, 141, 71))
self.SMSCreditsButtons.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
self.SMSCreditsButtons.setStyleSheet(_fromUtf8("border-image: url(Settings/CSImages/round.gif);\n"
"background: transparent;"))
self.SMSCreditsButtons.setText(_fromUtf8(""))
self.SMSCreditsButtons.setObjectName(_fromUtf8("SMSCreditsButtons"))
self.VoteButton = QtGui.QPushButton(Form)
self.VoteButton.setGeometry(QtCore.QRect(720, 140, 151, 61))
self.VoteButton.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
self.VoteButton.setStyleSheet(_fromUtf8("\n"
"background: transparent;\n"
"border-image: url(Settings/CSImages/votebanner.jpg);"))
self.VoteButton.setText(_fromUtf8(""))
self.VoteButton.setObjectName(_fromUtf8("VoteButton"))
eslide = self.Getter("BeastFront","Slider")
enews = self.Getter("BeastFront","News")
self.WebViewScrollingImages = QtWebKit.QWebView(Form)
self.WebViewScrollingImages.setGeometry(QtCore.QRect(190, 70, 251, 251))
self.WebViewScrollingImages.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.WebViewScrollingImages.setStyleSheet(_fromUtf8("background: transparent;\n"
""))
self.WebViewScrollingImages.setUrl(QtCore.QUrl(_fromUtf8(str(eslide))))
self.WebViewScrollingImages.setRenderHints(QtGui.QPainter.Antialiasing|QtGui.QPainter.SmoothPixmapTransform|QtGui.QPainter.TextAntialiasing)
self.WebViewScrollingImages.setObjectName(_fromUtf8("WebViewScrollingImages"))
self.WebViewNewsEvents = QtWebKit.QWebView(Form)
self.WebViewNewsEvents.setGeometry(QtCore.QRect(450, 70, 251, 251))
self.WebViewNewsEvents.setUrl(QtCore.QUrl(_fromUtf8(str(enews))))
self.WebViewNewsEvents.setRenderHints(QtGui.QPainter.Antialiasing|QtGui.QPainter.HighQualityAntialiasing|QtGui.QPainter.NonCosmeticDefaultPen|QtGui.QPainter.SmoothPixmapTransform|QtGui.QPainter.TextAntialiasing)
self.WebViewNewsEvents.setObjectName(_fromUtf8("WebViewNewsEvents"))
self.LatestVersionName = QtGui.QLabel(Form)
self.LatestVersionName.setGeometry(QtCore.QRect(720, 380, 81, 16))
self.LatestVersionName.setStyleSheet(_fromUtf8("color: rgb(145, 145, 145);"))
self.LatestVersionName.setObjectName(_fromUtf8("LatestVersionName"))
self.YourVersionName = QtGui.QLabel(Form)
self.YourVersionName.setGeometry(QtCore.QRect(720, 400, 81, 16))
self.YourVersionName.setStyleSheet(_fromUtf8("color: rgb(145, 145, 145);"))
self.YourVersionName.setObjectName(_fromUtf8("YourVersionName"))
self.StatusName = QtGui.QLabel(Form)
self.StatusName.setGeometry(QtCore.QRect(720, 420, 61, 20))
self.StatusName.setStyleSheet(_fromUtf8("color: rgb(145, 145, 145);"))
self.StatusName.setObjectName(_fromUtf8("StatusName"))
self.label_11 = QtGui.QLabel(Form)
self.label_11.setGeometry(QtCore.QRect(780, 420, 81, 16))
self.label_11.setStyleSheet(_fromUtf8("color: rgb(188, 188, 188);"))
self.label_11.setObjectName(_fromUtf8("label_11"))
self.NotificationBox = QtGui.QPlainTextEdit(Form)
self.NotificationBox.setGeometry(QtCore.QRect(320, 330, 381, 21))
font = QtGui.QFont()
font.setPointSize(7)
self.NotificationBox.setFont(font)
self.NotificationBox.setStyleSheet(_fromUtf8("color: rgb(0, 170, 0);\n"
"background: transparent;"
"border: none;"))
self.NotificationBox.insertPlainText(_fromUtf8(""))
self.NotificationBox.setObjectName(_fromUtf8("NotificationBox"))
self.NotificationBox.setDisabled(1)
self.NotificationBox2 = QtGui.QPlainTextEdit(Form)
self.NotificationBox2.setGeometry(QtCore.QRect(320, 330, 381, 21))
font = QtGui.QFont()
font.setPointSize(7)
self.NotificationBox2.setFont(font)
self.NotificationBox2.setStyleSheet(_fromUtf8("color: rgb(0, 170, 0);\n"
"background: transparent;"
"border: none;"))
self.NotificationBox2.insertPlainText(_fromUtf8(""))
self.NotificationBox2.setObjectName(_fromUtf8("NotificationBox2"))
self.NotificationBox2.setDisabled(1)
self.ServerName = QtGui.QLabel(Form)
self.ServerName.setGeometry(QtCore.QRect(100, 20, 251, 51))
font = QtGui.QFont()
font.setFamily(_fromUtf8("Monotype Corsiva"))
font.setPointSize(24)
font.setBold(True)
font.setItalic(True)
font.setUnderline(False)
font.setWeight(75)
font.setStrikeOut(False)
font.setKerning(True)
font.setStyleStrategy(QtGui.QFont.PreferAntialias)
self.ServerName.setFont(font)
self.ServerName.setStyleSheet(_fromUtf8("background: none;\n"
"\n"
"\n"
"\n"
"color: qconicalgradient(cx:0, cy:0, angle:135, stop:0 rgba(255, 255, 0, 69), stop:0.375 rgba(255, 255, 0, 69), stop:0.423533 rgba(251, 255, 0, 145), stop:0.45 rgba(247, 255, 0, 208), stop:0.477581 rgba(255, 244, 71, 130), stop:0.518717 rgba(255, 218, 71, 130), stop:0.55 rgba(255, 255, 0, 255), stop:0.57754 rgba(255, 203, 0, 130), stop:0.625 rgba(255, 255, 0, 69), stop:1 rgba(255, 255, 0, 69));"))
self.ServerName.setObjectName(_fromUtf8("ServerName"))
self.CurrentVersionLabel = QtGui.QLabel(Form)
self.CurrentVersionLabel.setGeometry(QtCore.QRect(800, 400, 61, 16))
self.CurrentVersionLabel.setStyleSheet(_fromUtf8("color: rgb(145, 145, 145);"))
self.CurrentVersionLabel.setObjectName(_fromUtf8("CurrentVersionLabel"))
self.LatestVersionLabel = QtGui.QLabel(Form)
self.LatestVersionLabel.setGeometry(QtCore.QRect(800, 380, 61, 16))
self.LatestVersionLabel.setStyleSheet(_fromUtf8("color: rgb(145, 145, 145);"))
self.LatestVersionLabel.setObjectName(_fromUtf8("LatestVersionLabel"))
self.ServerStatusLabel = QtGui.QLabel(Form)
self.ServerStatusLabel.setGeometry(QtCore.QRect(100, 80, 71, 16))
self.ServerStatusLabel.setStyleSheet(_fromUtf8("color: rgb(129, 129, 129);\n"
"background: none;"))
self.ServerStatusLabel.setObjectName(_fromUtf8("ServerStatusLabel"))
self.OnlineLabel = QtGui.QLabel(Form)
self.OnlineLabel.setGeometry(QtCore.QRect(80, 100, 101, 20))
font = QtGui.QFont()
font.setPointSize(10)
self.OnlineLabel.setFont(font)
self.OnlineLabel.setStyleSheet(_fromUtf8("color: rgb(91, 170, 0);"))
self.OnlineLabel.setObjectName(_fromUtf8("OnlineLabel"))
self.HorizontalLine = QtGui.QFrame(Form)
self.HorizontalLine.setGeometry(QtCore.QRect(80, 90, 101, 20))
font = QtGui.QFont()
font.setPointSize(1)
self.HorizontalLine.setFont(font)
self.HorizontalLine.setStyleSheet(_fromUtf8("background: none;"))
self.HorizontalLine.setFrameShape(QtGui.QFrame.HLine)
self.HorizontalLine.setFrameShadow(QtGui.QFrame.Sunken)
self.HorizontalLine.setObjectName(_fromUtf8("HorizontalLine"))
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(720, 50, 161, 71))
self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
self.pushButton.setStyleSheet(_fromUtf8("border-image: url(Settings/CSImages/left_main_snsImg100408.jpg);"))
self.pushButton.setText(_fromUtf8(""))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.Closebutton = QtGui.QPushButton(Form)
self.Closebutton.setGeometry(QtCore.QRect(20, 20, 40, 40))
self.Closebutton.setCursor(QtGui.QCursor(QtCore.Qt.ClosedHandCursor))
self.Closebutton.setStyleSheet(_fromUtf8("QPushButton{border-image: url(Settings/CSImages/closetekster.png);\n"
"\n"
"\n"
"background: transparent;}\n"
"\n"
"QPushButton:hover{\n"
"\n"
"border-image: url(Settings/CSImages/hover.png);\n"
"}"))
self.Closebutton.setText(_fromUtf8(""))
self.Closebutton.setObjectName(_fromUtf8("Closebutton"))
self.MinimizeButton = QtGui.QPushButton(Form)
self.MinimizeButton.setGeometry(QtCore.QRect(20, 60, 25, 29))
self.MinimizeButton.setCursor(QtGui.QCursor(QtCore.Qt.ClosedHandCursor))
self.MinimizeButton.setStyleSheet(_fromUtf8("\n"
"\n"
"QPushButton{border-image: url(Settings/CSImages/minimizetekster.png);\n"
"\n"
"\n"
"background: transparent;}\n"
"\n"
"QPushButton:hover{\n"
"\n"
"border-image: url(Settings/CSImages/MinHoverTekster.png);\n"
"}"))
self.MinimizeButton.setText(_fromUtf8(""))
self.MinimizeButton.setObjectName(_fromUtf8("MinimizeButton"))
self.Wizard = QtGui.QLabel(Form)
self.Wizard.setGeometry(QtCore.QRect(0, 110, 291, 341))
self.Wizard.setStyleSheet(_fromUtf8("background: transparent;"))
self.Wizard.setText(_fromUtf8(""))
_xIcon = self.Getter("BeastLauncher","Icon")
self.Wizard.setPixmap(QtGui.QPixmap(_fromUtf8(_xIcon)))
self.Wizard.setScaledContents(True)
self.Wizard.setObjectName(_fromUtf8("Wizard"))
self.CheckForUpdateButton = QtGui.QPushButton(Form)
self.CheckForUpdateButton.setGeometry(QtCore.QRect(190, 400, 111, 41))
self.CheckForUpdateButton.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
self.CheckForUpdateButton.setStyleSheet(_fromUtf8("QPushButton{\n"
"background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #3498db, stop: 1 #2980b9);\n"
"color: #ffffff;\n"
"border: 2px outset #333751;\n"
"border-radius: 5px 5px 5px 5px;\n"
"}\n"
"\n"
"\n"
"QPushButton:hover\n"
"{\n"
"background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2980b9, stop: 1 #3498db);\n"
"\n"
"border: none;\n"
"\n"
"}\n"
"\n"
""))
self.CheckForUpdateButton.setObjectName(_fromUtf8("CheckForUpdateButton"))
self.tabWidget = QtGui.QTabWidget(Form)
self.tabWidget.setGeometry(QtCore.QRect(310, 350, 391, 111))
self.tabWidget.setStyleSheet(_fromUtf8("QTabWidget::tab-bar {\n"
"background: none;\n"
"border: transparent;\n"
"border-color: transparent;\n"
"\n"
" }\n"
"\n"
" QTabBar::tab {\n"
"background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #26293B , stop: 1 #26293B);\n"
" color: white;\n"
"border: none;\n"
" padding: 10px;\n"
" }\n"
"\n"
" QTabBar::tab:selected {\n"
" background: orange;\n"
"border: none;\n"
" }\n"
"\n"
"\n"
"QTabWidget::pane { border: 0; }"))
self.tabWidget.setTabPosition(QtGui.QTabWidget.North)
self.tabWidget.setTabShape(QtGui.QTabWidget.Rounded)
self.tabWidget.setElideMode(QtCore.Qt.ElideNone)
self.tabWidget.setUsesScrollButtons(False)
self.tabWidget.setTabsClosable(False)
self.tabWidget.setMovable(True)
self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
self.PlayNow = QtGui.QWidget()
self.PlayNow.setObjectName(_fromUtf8("PlayNow"))
self.StartGameButton_5 = QtGui.QPushButton(self.PlayNow)
self.StartGameButton_5.setGeometry(QtCore.QRect(210, 20, 161, 41))
self.StartGameButton_5.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))
self.StartGameButton_5.setStyleSheet(_fromUtf8("border-image: url(Settings/CSImages/bt_gamestart.gif);"))
self.StartGameButton_5.setText(_fromUtf8(""))
self.StartGameButton_5.setObjectName(_fromUtf8("StartGameButton_5"))
self.NewsInStartGame_5 = QtGui.QLabel(self.PlayNow)
self.NewsInStartGame_5.setGeometry(QtCore.QRect(10, 0, 131, 71))
font = QtGui.QFont()
font.setPointSize(7)
self.NewsInStartGame_5.setFont(font)
self.NewsInStartGame_5.setStyleSheet(_fromUtf8("background: none;\n"
"color: #ffffff;"))
self.NewsInStartGame_5.setObjectName(_fromUtf8("NewsInStartGame_5"))
self.OrangeLetterC_5 = QtGui.QLabel(self.PlayNow)
self.OrangeLetterC_5.setGeometry(QtCore.QRect(160, 30, 21, 16))
self.OrangeLetterC_5.setText(_fromUtf8(""))
self.OrangeLetterC_5.setPixmap(QtGui.QPixmap(_fromUtf8("Settings/CSImages/icon_wcoinc.gif")))
self.OrangeLetterC_5.setObjectName(_fromUtf8("OrangeLetterC_5"))
self.tabWidget.addTab(self.PlayNow, _fromUtf8(""))
self.SettingsTab = QtGui.QWidget()
self.SettingsTab.setObjectName(_fromUtf8("SettingsTab"))
self.SaveUsernameButton_5 = QtGui.QPushButton(self.SettingsTab)
self.SaveUsernameButton_5.setGeometry(QtCore.QRect(250, 10, 131, 51))
self.SaveUsernameButton_5.setStyleSheet(_fromUtf8("QPushButton{\n"
"background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffcc00, stop: 1 #b87f2b);\n"
"color: #ffffff;\n"
"border: none;\n"
"}\n"
"\n"
"\n"
"QPushButton:hover\n"
"{\n"
"background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2980b9, stop: 1 #3498db);\n"
"\n"
"border: none;\n"
"\n"
"}\n"
"\n"
""))
self.SaveUsernameButton_5.setObjectName(_fromUtf8("SaveUsernameButton_5"))
self.label_33 = QtGui.QLabel(self.SettingsTab)
self.label_33.setGeometry(QtCore.QRect(10, 40, 71, 16))
self.label_33.setStyleSheet(_fromUtf8("color: #ffffff;\n"
"background: none;"))
self.label_33.setObjectName(_fromUtf8("label_33"))
self.label_34 = QtGui.QLabel(self.SettingsTab)
self.label_34.setGeometry(QtCore.QRect(140, 40, 91, 16))
self.label_34.setStyleSheet(_fromUtf8("color: #ffffff;\n"
"background: none;"))
self.label_34.setObjectName(_fromUtf8("label_34"))
self.WindowsOnorFullSlider = QtGui.QSlider(self.SettingsTab)
self.WindowsOnorFullSlider.setGeometry(QtCore.QRect(90, 40, 41, 19))
self.WindowsOnorFullSlider.setStyleSheet(_fromUtf8("background: none;"))
self.WindowsOnorFullSlider.setMaximum(2)
self.WindowsOnorFullSlider.setValue(1)
self.WindowsOnorFullSlider.setOrientation(QtCore.Qt.Horizontal)
self.WindowsOnorFullSlider.setObjectName(_fromUtf8("WindowsOnorFullSlider"))
self.WindowsOnorFullSlider.setDisabled(1)
self.comboBox_5 = QtGui.QComboBox(self.SettingsTab)
self.comboBox_5.setGeometry(QtCore.QRect(10, 10, 171, 22))
self.comboBox_5.setStyleSheet(_fromUtf8("QComboBox { \n"
" border: 1px solid gray;\n"
" border-radius: 3px;\n"
" padding: 1px 18px 1px 3px;\n"
" min-width: 6em;\n"
"color:rgb(79, 79, 79);\n"
" }\n"
"\n"
" QComboBox:editable {\n"
" background: white;\n"
" }\n"
"\n"
" QComboBox:!editable, QComboBox::drop-down:editable {\n"
" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
" stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,\n"
" stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);\n"
" }\n"
"\n"
" /* QComboBox gets the "on" state when the popup is open */\n"
" QComboBox:!editable:on, QComboBox::drop-down:editable:on {\n"
" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n"
" stop: 0 #D3D3D3, stop: 0.4 #D8D8D8,\n"
" stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);\n"
" }\n"
"\n"
" QComboBox:on { /* shift the text when the popup opens */\n"
" padding-top: 3px;\n"
" padding-left: 4px;\n"
" }\n"
"\n"
" QComboBox::drop-down {\n"
" subcontrol-origin: padding;\n"
" subcontrol-position: top right;\n"
" width: 15px;\n"
" background: #555;\n"
" border-left-width: 1px;\n"
" border-left-color: darkgray;\n"
" border-left-style: solid; /* just a single line */\n"
" border-top-right-radius: 3px; /* same radius as the QComboBox */\n"
" border-bottom-right-radius: 3px;\n"
" }\n"
"QComboBox QAbstractItemView {\n"
" border: 2px solid darkgray;\n"
" color: black;\n"
"background: yellow;\n"
"selection-color: black;\n"
" selection-background-color: grey;\n"
"}\n"
"\n"
""))
self.comboBox_5.setObjectName(_fromUtf8("comboBox_5"))
self.comboBox_5.addItem(_fromUtf8(""))
self.comboBox_5.addItem(_fromUtf8(""))
self.comboBox_5.addItem(_fromUtf8(""))
self.comboBox_5.addItem(_fromUtf8(""))
self.comboBox_5.addItem(_fromUtf8(""))
self.comboBox_5.addItem(_fromUtf8(""))
self.comboBox_5.addItem(_fromUtf8(""))
self.label = QtGui.QLabel(self.SettingsTab)
self.label.setGeometry(QtCore.QRect(30, 60, 51, 16))
self.label.setStyleSheet(_fromUtf8("color: #ffffff;\n"
"background: none;"))
self.label.setObjectName(_fromUtf8("label"))
self.label_2 = QtGui.QLabel(self.SettingsTab)
self.label_2.setGeometry(QtCore.QRect(140, 60, 71, 16))
self.label_2.setStyleSheet(_fromUtf8("color: #ffffff;\n"
"background: none;"))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.SoundsOnandOffSlider = QtGui.QSlider(self.SettingsTab)
self.SoundsOnandOffSlider.setGeometry(QtCore.QRect(90, 60, 41, 19))
self.SoundsOnandOffSlider.setStyleSheet(_fromUtf8("color: #ffffff;\n"
"background: none;"))
self.SoundsOnandOffSlider.setMaximum(2)
self.SoundsOnandOffSlider.setValue(1)
self.SoundsOnandOffSlider.setOrientation(QtCore.Qt.Horizontal)
self.SoundsOnandOffSlider.setObjectName(_fromUtf8("SoundsOnandOffSlider"))
self.tabWidget.addTab(self.SettingsTab, _fromUtf8(""))
self.ContactTab = QtGui.QWidget()
self.ContactTab.setObjectName(_fromUtf8("ContactTab"))
self.label_36 = QtGui.QLabel(self.ContactTab)
self.label_36.setGeometry(QtCore.QRect(10, 10, 371, 71))
font = QtGui.QFont()
font.setPointSize(7)
self.label_36.setFont(font)
self.label_36.setStyleSheet(_fromUtf8("color: rgb(166, 166, 166);\n"
"background: none;"))
self.label_36.setObjectName(_fromUtf8("label_36"))
self.progressBar = QtGui.QProgressBar(Form) #// Progress Bar
self.progressBar.setGeometry(QtCore.QRect(278, 331,420, 15))
self.progressBar.setStyleSheet(_fromUtf8(" QProgressBar {\n"
" border: 2px solid grey;\n"
" border-radius: 5px;\n"
" text-align: center;\n"
" color: #404040;\n"
" font-weight: bold;\n"
" }\n"
"\n"
" QProgressBar:chunk {\n"
" background-color: #05B8CC;\n"
" width: 20px;\n"
" }"))
self.progressBar.setProperty("value", 100)
self.progressBar.setTextVisible(True)
self.progressBar.setInvertedAppearance(False)
self.progressBar.setTextDirection(QtGui.QProgressBar.TopToBottom)
self.progressBar.setObjectName(_fromUtf8("progressBar"))
self.tabWidget.addTab(self.ContactTab, _fromUtf8(""))
self.retranslateUi(Form)
self.tabWidget.setCurrentIndex(0)
QtCore.QObject.connect(self.WebshopButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.WebshopWebFunction)
QtCore.QObject.connect(self.SMSCreditsButtons, QtCore.SIGNAL(_fromUtf8("clicked()")), self.SMSwebFunction)
QtCore.QObject.connect(self.VoteButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.VoteButtonFunction)
QtCore.QObject.connect(self.CheckForUpdateButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.CheckforUpdatesTrigger)
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.SocialsBarFunction)
QtCore.QObject.connect(self.Closebutton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.close)
QtCore.QObject.connect(self.MinimizeButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.showMinimized)
QtCore.QObject.connect(self.StartGameButton_5, QtCore.SIGNAL(_fromUtf8("clicked()")), self.StartGameFunction)
QtCore.QObject.connect(self.SaveUsernameButton_5, QtCore.SIGNAL(_fromUtf8("clicked()")), self.SaveWindowsandSoundsFunction)
QtCore.QMetaObject.connectSlotsByName(Form)
class BeastErr(Exception):
pass
def BeastException(self,title,message):
msgBox = QtGui.QMessageBox()
msgBox.setWindowTitle(str(title))
msgBox.setText(str(message))
msgBox.exec_()
def retranslateUi(self, Form):
import urllib
Form.setWindowTitle(_translate("Form", "BeastLauncher", None))
self.LatestVersionName.setText(_translate("Form", " Latest Version:", None))
self.YourVersionName.setText(_translate("Form", " Your Version: ", None))
self.StatusName.setText(_translate("Form", " Status: ", None))
readup = self.Getter('BeastUpdater','Updater')
lwebversion = urllib.urlopen(str(readup)+'/csupdater/LatestVersion.txt')
self.readwebver = lwebversion.read()
self.Current_V = str(self.Getter('BeastUpdater','Version')).split(",")[-1] # Loads the last version
try:
if float(self.readwebver) > float(self.Current_V):
self.label_11.setText('Please Update!')
else:
self.label_11.setText('Updated!')
except:
self.BeastException(title="BeastErr",message="Unable to Parse and Load Version")
GetName = lambda: "" if self.Getter('BeastLauncher','Name') == 'None' else self.Getter('BeastLauncher','Name')
self.ServerName.setText(_translate("Form", GetName(), None))
self.CheckForUpdateButton.setText(_translate("Form", "Check for Updates", None))
self.CurrentVersionLabel.setText(_translate("Form", " " + str(self.Current_V), None))
self.LatestVersionLabel.setText(_translate("Form", " " + str(self.readwebver), None))
self.ServerStatusLabel.setText(_translate("Form", "Server Status", None))
self.OnlineLabel.setText(_translate("Form", " ONLINE", None))
self.NewsInStartGame_5.setText(_translate("Form", "<html><head/><body><p><span style=" color:#949494;">You might want to take a check</span></p><p><span style=" color:#949494;">first at the Settings tab before</span></p><p><span style=" color:#949494;">Starting the Game?</span></p></body></html>", None))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.PlayNow), _translate("Form", "Play Now", None))
self.SaveUsernameButton_5.setText(_translate("Form", "Save Settings", None))
self.label_33.setText(_translate("Form", "Windows Mode", None))
self.label_34.setText(_translate("Form", "Full Screen Mode", None))
self.comboBox_5.setCurrentIndex(3)
self.comboBox_5.setItemText(0, _translate("Form", " 800x600 Window Screen", None))
self.comboBox_5.setItemText(1, _translate("Form", " 1024x768 Window Screen", None))
self.comboBox_5.setItemText(2, _translate("Form", " 1280x1024 Window Screen", None))
self.comboBox_5.setItemText(3, _translate("Form", " Select Window Size", None))
self.comboBox_5.setItemText(4, _translate("Form", " 800x600 Full Screen", None))
self.comboBox_5.setItemText(5, _translate("Form", " 1024x768 Full Screen", None))
self.comboBox_5.setItemText(6, _translate("Form", " 1280x1024 Full Screen", None))
self.label.setText(_translate("Form", "Sounds On", None))
self.label_2.setText(_translate("Form", "Sounds Off", None))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.SettingsTab), _translate("Form", "Settings", None))
try:
SMess = self.Getter("BeastLauncher","Info").split(",")
self.label_36.setText(_translate("Form", "<html><head/><body><p><b>{msg} </p></b><p>Visit Us for more infromations at <u>{url}</u></p><br/>Copyright 2015 © CoreSEC Softwares, Ca<br/></body></html>".format(url=SMess[0],msg=SMess[1]), None))
except:
self.BeastException(title="BeastError",message="Unable to Parse [Info] value!")
self.tabWidget.setTabText(self.tabWidget.indexOf(self.ContactTab), _translate("Form", "Contact Us", None))
def UpdateEngine(self,version,newversion):
import urllib2 as get
global TupleVersion, app, showed
__version = version #// float from file
__newver = newversion #// float from Web
__updater = self.Getter("BeastUpdater","updater")
__bindLoad = self.progressBar
self.Threader = QtCore.QThread()
self.Booster = QtGui.QApplication.processEvents
showed = False
def ListVersions(old,new,updater):
"Lists of Versions to Update"
global TupleVersion, TupleVersionWrite
Data = (old,new,updater)
TupleVersion = [] # Contains the Unwritten (Unseen Version)
TupleVersionWrite = [str(float(old))] # Contains the List of Final Version (For Writing to Settings)
def RemoveAllZips():
import os
global TupleVersion
for cv in sorted(TupleVersion):
os.remove(str(cv)+".zip")
def UnzipAll():
import zipfile
global TupleVersion
for zips in sorted(TupleVersion):
CSunzip = zipfile.ZipFile(str(zips)+'.zip')
CSunzip.extractall()
CSunzip.close()
RemoveAllZips()
def ProcessAll(*args):
"Processing Function for Datas and Versioning"
global TupleVersionWrite,TupleVersion
__bindLoad.setFormat("Locating versions to Patch!")
def Message(m):
__bindLoad.setFormat(m)
def SetVersion():
global TupleVersionWrite
import ConfigParser, sys
templ = ",".join(TupleVersionWrite)
ffile = "Settings/Main"
config = ConfigParser.ConfigParser()
config.read(ffile)
config.set("BeastUpdater","version",str(templ))
with open(ffile, "wb") as config_file:
config.write(config_file)
def RevertStyleSheet(finished=False):
if finished:
__bindLoad.setStyleSheet("color: #404040;")
else:
__bindLoad.setStyleSheet("color: white ")
def StartMain():
toStart2 = self.Getter("BeastLauncher","Executable")
self.Booster()
def StartUpdate(which=None,multi=False):
if multi: # // Multiple version to patch
try:
webFolder = str(__updater)+'/csupdater/Versions/'+str(which)+'/'+str(which)+'.zip' # // e.g domain.com/csupdater/3.2/3.2.zip
url = webFolder
file_name = url.split('/')[-1]
u = get.urlopen(url)
f = open(file_name, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
file_size_dl = 0
block_sz = 8192
stop = False
self.Booster()
show_once = False
while not stop:
self.Booster()
if not stop and show_once == False:
time.sleep(0.2)
Message("Updater Started for version {v}".format(v=which))
show_once = True
buffer = u.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
status = r"%3.2f % % " % (file_size_dl * 100. / file_size)
#statuss = status + chr(8)*(len(status)+1)
x=status.replace('%','')
floatingX = float(x)
self.Booster()
Message("%p% for version {v}".format(v=which))
__bindLoad.setValue(float(floatingX))
self.Booster()
if __bindLoad.value() == 100:
#f.close() #// Needs to Close (could be a MemLeak)
stop = True #// Stops Loop
self.label_11.setText("Updating..")
self.CurrentVersionLabel.setText(_translate("Form", " " + str(which), None))
Message("Finished Updating to version {v}!".format(v=which))
time.sleep(3)
f.close()
except:
Message("Unable to Update!")
else:
pass
def CallRestarter():
pass
def Evaluate():
global TupleVersion, TupleVersionWrite, showed
if TupleVersion:
self.Booster()
for ver in sorted(TupleVersion):
if len(TupleVersion) > 1 and showed == False:
Message("There are {cout} patches to update!".format(cout=len(TupleVersion)))
self.Booster()
showed = True
time.sleep(4)
else:
if not showed:
Message("There is {cout} patch to update!".format(cout=len(TupleVersion)))
self.Booster()
time.sleep(4)
showed = True
self.Booster()
StartUpdate(which=ver,multi=True)
Message("You can now start the Game!")
self.label_11.setText("Now Updated!")
UnzipAll() #// Unpack the Zipped patches
SetVersion() #// Write the Version
Evaluate()
def ProcVersions(*args):
"Processing Function for Listing to Update Version"
global TupleVersion, TupleVersionWrite
import time
old, new = eval(args[0]),args[1] #// Versions
RealTStep = 0.1
# // Always make the Step 0.1 (Else Patching will be too messy.)
try:
while float(old) < float(new):
self.Booster()
time.sleep(0.1)
old += float(RealTStep)
TupleVersion.append(eval(str(old)))
TupleVersionWrite.append(str(eval(str(old))))
self.Booster()
finally:
ProcessAll()
def GetAhead():
req = get.Request(str(Data[2])+'/csupdater/LatestVersion.txt')
req.add_header('Referer', 'http://www.python.org/')
resp = get.urlopen(req)
GetLatest = resp.read()
Latest = eval(str(GetLatest))
ProcVersions(Data[0],Data[1]) # Process Version into Tupled List
GetAhead()
ListVersions(__version,__newver,__updater) # Evalucate Version
def WebshopWebFunction(self):
strfile = self.Getter("BeastExternal","WebshopLink")
rightnews = self.WebViewNewsEvents
rightnews.setUrl(QtCore.QUrl(_fromUtf8(str(strfile))))
rightnews.setGeometry(QtCore.QRect(190, 70, 500, 251))
def SMSwebFunction(self):
strfile = self.Getter("BeastExternal","SmsLink")
rightnewsc = self.WebViewNewsEvents
rightnewsc.setUrl(QtCore.QUrl(_fromUtf8(str(strfile))))
rightnewsc.setGeometry(QtCore.QRect(190, 70, 500, 251))
def SocialsBarFunction(self):
strfile = self.Getter("BeastExternal","SocialLink")
rightnewsq = self.WebViewNewsEvents
rightnewsq.setUrl(QtCore.QUrl(_fromUtf8(str(strfile))))
rightnewsq.setGeometry(QtCore.QRect(190, 70, 500, 251))
def VoteButtonFunction(self):
strfile = self.Getter("BeastExternal","VoteLink")
rightnewsx = self.WebViewNewsEvents
rightnewsx.setUrl(QtCore.QUrl(_fromUtf8(str(strfile))))
rightnewsx.setGeometry(QtCore.QRect(190, 70, 500, 251))
def CheckforUpdatesTrigger(self):
self.timer = QtCore.QTimer()
self.timer.setSingleShot(True)
self.timer.timeout.connect(self.CheckforUpdatesFunction)
self.timer.start(1000)
def CheckforUpdatesFunction(self,get=False):
try:
Getupdater = self.Getter("BeastUpdater","Updater")
req = urllib2.Request(str(Getupdater)+'/csupdater/LatestVersion.txt')
req.add_header('Referer', 'http://www.python.org/')
resp = urllib2.urlopen(req)
GetLatest = resp.read() # Get Web Version / Latest
floatWeb = float(GetLatest) # Web Version
except:
self.BeastException("UpdateEngine Failed","Connection or Remote file not found.")
EvaledFloat = eval(str(self.CurrentVersionLabel.text()))
if get:
if float(floatWeb) > float(EvaledFloat):
return True
else:
return False
if not get:
if float(floatWeb) > float(EvaledFloat):
self.UpdateEngine(self.Current_V,floatWeb)
else:
self.progressBar.setFormat("Your client is Updated already!")
def StartGameFunction(self):
try:
import BeastAH
except:
pass
from subprocess import Popen
if self.CheckforUpdatesFunction(get=True):
self.CheckforUpdatesFunction()
else:
try:
Form.close(),Popen(str(self.Getter("BeastLauncher","Executable"))) # Runs Game if no Latest Version
except:
self.BeastException("Error Loading Main","Unable to Load Main Executable!.")
def SaveUsernameFunction(self):
""" Unused Function """
pass # hahaha lucky you
def SaveWindowsandSoundsFunction(self):
from subprocess import Popen as run
getResolutions = self.comboBox_5.currentText() #Get Resolution
setWindSlider = self.WindowsOnorFullSlider
getSounds = self.SoundsOnandOffSlider.value()
Server = self.Getter("BeastLauncher","Name")
if Server == "0" or Server == "None":
Server = ""
_str = """regedit.exe /s "Settings/Resolution/"""
######## WS START ############
if "Select Window Size" in str(getResolutions):
setWindSlider.setValue(0)
self.NotificationBox.clear(), self.NotificationBox2.clear(),self.NotificationBox2.insertPlainText(str(Server)+' Launcher: Default Selected')
if "800x600 Window Screen" in str(getResolutions):
setWindSlider.setValue(0)
run(_str+"w800x600.reg", shell=True) #window 8x6
self.NotificationBox.clear(), self.NotificationBox2.clear(),self.NotificationBox2.insertPlainText(str(Server)+' Launcher: 800x600 Window-Mode Selected [PRESS YES]')
if "1024x768 Window Screen" in str(getResolutions):
setWindSlider.setValue(0)
run(_str+"w1024x768.reg", shell=True) #window 1x7
self.NotificationBox.clear(), self.NotificationBox2.clear(),self.NotificationBox2.insertPlainText(str(Server)+' Launcher: 1024x768 Window-Mode Selected [PRESS YES]')
if "1280x1024 Window Screen" in str(getResolutions):
setWindSlider.setValue(0)
self.NotificationBox.clear(), self.NotificationBox2.clear(),self.NotificationBox2.insertPlainText(str(Server)+' Launcher: 1280x1024 Window-Mode Selected [PRESS YES]')
run(_str+"w1280x1024.reg", shell=True) #window 121
############## FS START #######
if "800x600 Full Screen" in str(getResolutions):
setWindSlider.setValue(2)
self.NotificationBox.clear(), self.NotificationBox2.clear(),self.NotificationBox2.insertPlainText(str(Server)+' Launcher: 800x600 Full-Screen Mode Selected [PRESS YES]')
run(_str+'f800x600.reg', shell=True) #window 8x6
if "1024x768 Full Screen" in str(getResolutions):
setWindSlider.setValue(2)
self.NotificationBox.clear(), self.NotificationBox2.clear(),self.NotificationBox2.insertPlainText(str(Server)+' Launcher: 1024x768 Full-Screen Mode Selected [PRESS YES]')
run(_str+'f1024x768.reg', shell=True) #window 8x6
if "1280x1024 Full Screen" in str(getResolutions):
setWindSlider.setValue(2)
self.NotificationBox.clear(), self.NotificationBox2.clear(),self.NotificationBox2.insertPlainText(str(Server)+' Launcher: 1280x1024 Full-Screen Mode Selected [PRESS YES]')
run(_str+'f1280x1024.reg', shell=True) #window 8x6
##############################################
def CheckSoundsNow(object):
getsSounds = getSounds
if getsSounds == 1:
pass # Next Update
if getsSounds == 2:
pass # Next Update
if getsSounds == 0:
pass # Next Update
CheckSoundsNow(object)
def close(self):
Form.close()
def showMinimized(self):
Form.showMinimized()
import bl
from PyQt4 import QtWebKit
if __name__ == "__main__":
import sys,time
global app
app = QtGui.QApplication(sys.argv)
def Proc_Splash(get=False):
import ConfigParser
P = ConfigParser.ConfigParser()
P.read("Settings/Main")
try:
Booled = P.get("BeastLauncher","Splash").split(",")
if get:
if Booled[0] == "0" or Booled[0] == "None" or Booled[0] == "False":
return False
else:
return True
else:
return Booled[1]
except:
pass # splash Err
#splasher
if Proc_Splash(get=True) == True:
splash_pix = QtGui.QPixmap(Proc_Splash(get=False))
splash = QtGui.QSplashScreen(splash_pix, QtCore.Qt.WindowStaysOnTopHint)
splash.setMask(splash_pix.mask())
splash.show()
else:
pass
# end
time.sleep(2)
if Proc_Splash(get=True) == True:
app.processEvents()
Form = QtGui.QWidget()
Form.setWindowFlags(QtCore.Qt.FramelessWindowHint)
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
if Proc_Splash(get=True) == True:
splash.finish(Form)
sys.exit(app.exec_())
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
can someone reupload launcher source on C++ ?
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Thanks for launcher.
It's possible to run main only with this launcher? (impossible to run with main.exe)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Sorry but this has no C++ source, though you can make it to compile as a C, using Cython, its gonna be real fast as C, and i think theres some translator for the QT lib from python to c++ source (only from the user interface code above.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
After I successfully compiled it using pyinstaller
I'm getting this error If I click START GAME "Unable to Load Main Executable!."
You said this:
Warning:
--upx makes your .exe generated code unreadable (Packed exe)
Replace C:\Python27 with your Python directory.
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Hi Dark, also remember that If your Computer is 64bit, please use 64 and same as 32bit Python, theres a big problem on packing it also make sure that PyQT is installed, and you are using the right folder Path
I Used this command with command prompt (Windows XP VBox) because i don't use windows,
Code:
pyinstaller -y -F --windowed --icon="Settings\CSImages\icon.ico" --version-file="version.txt" --workpath="C:\Users\Mark\Desktop\Builds" --distpath="C:\Users\Mark\Desktop\Builds" --upx-dir="upx" -p "C:\Program Files (x86)\Lib\site-packages\PyQt4" Launcher.py
Launcher.spec
Code:
# -*- mode: python -*-
a = Analysis(['Launcher.py'],
pathex=['C:\\Program Files (x86)\\Lib\\site-packages\\PyQt4', 'C:\\Users\\Mark\\Desktop\\Sources\\BeastLauncher'],
hiddenimports=[],
hookspath=None,
runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='Launcher.exe',
debug=False,
strip=None,
upx=True,
console=False , version='version.txt', icon='Settings\\CSImages\\icon.ico')
i know that its really pain in the arse to compile this one but it will work :)
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Is this launcher anti hacker? I need you to make a login for me. I'm from china. qq1988620@outlook.com thank you
- - - Updated - - -
Does this launcher protect against hackers? I need you to make a login for me. I'm from china. qq1988620@outlook.com thank you
-
re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
this launcher has no anticheat, it will only run your main.exe or any executable (it has an Auto-updater and can update version to version in one run :) )
-
Re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Hmmm damn... when I saw the title I think this is what I was looking for.... a nice functional launcher with the source!!, so I was thinking "I can edit the design"... but all the resource is encrypted :thumbdown:, there is no .UI file... so well there is no complete source :(:
-
Re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
Quote:
Originally Posted by
kusanagi90
Hmmm damn... when I saw the title I think this is what I was looking for.... a nice functional launcher with the source!!, so I was thinking "I can edit the design"... but all the resource is encrypted :thumbdown:, there is no .UI file... so well there is no complete source :(:
Then make one :)
-
Re: [Release] Launcher ZEN (New Updated Version) Free MuOnline Launcher with Auto-...
the link is dead please update this file