├── doc └── img │ ├── client-list.png │ ├── start-tools.png │ ├── ro-browser-dev.png │ ├── start-ai-error.png │ ├── browser-console.png │ ├── start-robrowser.png │ ├── ro-browser-app-flow.png │ └── start-http-server.png ├── applications ├── nwjs │ ├── icon.png │ └── package.json ├── pwa │ ├── icon.png │ └── manifest.webmanifest ├── tools │ ├── build │ │ ├── thread.png │ │ ├── readme.md │ │ └── index.html │ ├── converter │ │ ├── arrow-up.png │ │ ├── loading.gif │ │ ├── index.html │ │ └── style.css │ └── tests │ │ ├── altitude.html │ │ ├── str.html │ │ ├── action.html │ │ ├── ground.html │ │ ├── world.html │ │ ├── sprites.html │ │ ├── targa.html │ │ ├── models.html │ │ └── grannymodels.html └── browser-examples │ ├── icon.png │ ├── api-mapviewer-frame.html │ ├── api-strviewer-frame.html │ ├── api-grfviewer-frame.html │ ├── api-effectviewer-frame.html │ ├── api-modelviewer-frame.html │ ├── api-grfviewer-popup.html │ ├── api-mapviewer-popup.html │ ├── api-effectiewer-popup.html │ └── api-modelviewer-popup.html ├── src ├── UI │ ├── Components │ │ ├── ItemObtain │ │ │ ├── ItemObtain.html │ │ │ └── ItemObtain.css │ │ ├── Quest │ │ │ ├── Quest │ │ │ │ ├── QuestWindow.html │ │ │ │ ├── QuestWindow.css │ │ │ │ └── Quest.html │ │ │ ├── QuestV1 │ │ │ │ ├── QuestHelperV1.html │ │ │ │ ├── QuestHelperV1.css │ │ │ │ └── QuestV1.html │ │ │ └── Quest.js │ │ ├── Error │ │ │ ├── angeling.png │ │ │ ├── Error.html │ │ │ ├── Error.css │ │ │ └── Error.js │ │ ├── Intro │ │ │ └── images │ │ │ │ ├── box.jpg │ │ │ │ ├── about.png │ │ │ │ ├── delete.png │ │ │ │ ├── icon.png │ │ │ │ ├── play.png │ │ │ │ ├── ribbon.png │ │ │ │ ├── save.jpg │ │ │ │ ├── loading.gif │ │ │ │ ├── settings.png │ │ │ │ ├── add-server.jpg │ │ │ │ ├── background.jpg │ │ │ │ └── play-down.png │ │ ├── GrfViewer │ │ │ ├── Icons │ │ │ │ ├── 3d.png │ │ │ │ ├── fx.png │ │ │ │ ├── gr2.png │ │ │ │ ├── img.png │ │ │ │ ├── map.png │ │ │ │ ├── txt.png │ │ │ │ ├── audio.png │ │ │ │ ├── file.png │ │ │ │ ├── load.gif │ │ │ │ ├── arw-left.png │ │ │ │ ├── arw-right.png │ │ │ │ └── directory.png │ │ │ └── GrfViewer.html │ │ ├── FPS │ │ │ ├── FPS.html │ │ │ └── FPS.css │ │ ├── Rodex │ │ │ ├── RodexIcon.html │ │ │ ├── RodexIcon.css │ │ │ ├── RodexIcon.js │ │ │ └── ReadRodex.html │ │ ├── EntityRoom │ │ │ ├── EntityRoom.html │ │ │ ├── EntityRoom.css │ │ │ └── EntityRoom.js │ │ ├── MapName │ │ │ ├── MapName.html │ │ │ └── MapName.css │ │ ├── EntitySignboard │ │ │ ├── EntitySignboard.html │ │ │ └── EntitySignboard.css │ │ ├── PCGoldTimer │ │ │ ├── PCGoldTimer.html │ │ │ └── PCGoldTimer.css │ │ ├── SkillDescription │ │ │ ├── SkillDescription.html │ │ │ └── SkillDescription.css │ │ ├── WinPopup │ │ │ ├── WinPopup.html │ │ │ ├── WinPopup.css │ │ │ └── WinPopup.js │ │ ├── WinLogin │ │ │ ├── WinLoginV2 │ │ │ │ ├── WinLoginV2Background.css │ │ │ │ ├── WinLoginV2.html │ │ │ │ ├── WinLoginV2Background.js │ │ │ │ ├── WinLoginV2Background.html │ │ │ │ └── WinLoginV2.css │ │ │ ├── WinLogin.js │ │ │ └── WinLogin │ │ │ │ ├── WinLogin.html │ │ │ │ └── WinLogin.css │ │ ├── InputBox │ │ │ ├── InputBox.html │ │ │ └── InputBox.css │ │ ├── StrViewer │ │ │ ├── StrViewer.html │ │ │ └── StrViewer.css │ │ ├── ModelViewer │ │ │ ├── ModelViewer.html │ │ │ └── ModelViewer.css │ │ ├── GrannyModelViewer │ │ │ ├── GrannyModelViewer.html │ │ │ └── GrannyModelViewer.css │ │ ├── MiniMap │ │ │ ├── MiniMap │ │ │ │ ├── MiniMap.html │ │ │ │ └── MiniMap.css │ │ │ ├── MiniMap.js │ │ │ └── MiniMapV2 │ │ │ │ ├── MiniMapV2.css │ │ │ │ └── MiniMapV2.html │ │ ├── EffectViewer │ │ │ ├── EffectViewer.html │ │ │ └── EffectViewer.css │ │ ├── NpcMenu │ │ │ ├── NpcMenu.html │ │ │ └── NpcMenu.css │ │ ├── NpcBox │ │ │ ├── NpcBox.html │ │ │ └── NpcBox.css │ │ ├── CardIllustration │ │ │ ├── CardIllustration.html │ │ │ ├── CardIllustration.css │ │ │ └── CardIllustration.js │ │ ├── WinList │ │ │ ├── WinList.html │ │ │ └── WinList.css │ │ ├── ItemSelection │ │ │ ├── ItemSelection.html │ │ │ └── ItemSelection.css │ │ ├── MakeArrowSelection │ │ │ ├── MakeArrowSelection.html │ │ │ └── MakeArrowSelection.css │ │ ├── RefineWeaponSelection │ │ │ ├── RefineWeaponSelection.html │ │ │ └── RefineWeaponSelection.css │ │ ├── ContextMenu │ │ │ └── ContextMenu.css │ │ ├── MakeItemSelection │ │ │ ├── MakeItemSelection.html │ │ │ ├── ItemConvertSelection │ │ │ │ ├── MakeModelMessage │ │ │ │ │ ├── MakeModelMessage.html │ │ │ │ │ ├── MakeModelMessage.css │ │ │ │ │ └── MakeModelMessage.js │ │ │ │ └── ConvertItems.html │ │ │ ├── ItemListWindowSelection.html │ │ │ └── MakeItemSelection.css │ │ ├── StatusIcons │ │ │ └── StatusIcons.css │ │ ├── WinStats │ │ │ ├── WinStatsV1 │ │ │ │ └── WinStatsV1.css │ │ │ ├── WinStats │ │ │ │ └── WinStats.css │ │ │ ├── WinStatsV2 │ │ │ │ └── WinStatsV2.css │ │ │ └── WinStats.js │ │ ├── Vending │ │ │ └── VendingModelMessage │ │ │ │ ├── VendingModelMessage.html │ │ │ │ └── VendingModelMessage.css │ │ ├── ChatRoom │ │ │ └── ChatRoom.html │ │ ├── MakeReadBook │ │ │ └── MakeReadBook.html │ │ ├── Emoticons │ │ │ ├── Emoticons.html │ │ │ └── Emoticons.css │ │ ├── Escape │ │ │ ├── Escape.css │ │ │ └── Escape.html │ │ ├── SoundOption │ │ │ ├── SoundOption.css │ │ │ └── SoundOption.html │ │ ├── GraphicsOption │ │ │ └── GraphicsOption.css │ │ ├── VendingShop │ │ │ └── VendingShop.html │ │ ├── ChangeCart │ │ │ └── ChangeCart.css │ │ ├── ItemCompare │ │ │ └── ItemCompare.html │ │ ├── CharCreate │ │ │ ├── CharCreate.js │ │ │ ├── CharCreatev2 │ │ │ │ └── CharCreatev2.html │ │ │ └── CharCreate │ │ │ │ └── CharCreate.html │ │ ├── PlayerEquipment │ │ │ └── PlayerEquipment.js │ │ ├── ItemInfo │ │ │ └── ItemInfo.html │ │ ├── CharSelect │ │ │ ├── CharSelect.js │ │ │ └── CharSelect │ │ │ │ └── CharSelect.html │ │ ├── CheckAttendance │ │ │ └── CheckAttendance.html │ │ ├── Trade │ │ │ └── Trade.html │ │ ├── WorldMap │ │ │ └── WorldMap.html │ │ ├── ShortCut │ │ │ └── ShortCut.css │ │ ├── SkillList │ │ │ └── SkillList.js │ │ ├── BasicInfo │ │ │ └── BasicInfo.js │ │ ├── CartItems │ │ │ └── CartItems.html │ │ ├── Storage │ │ │ └── Storage.html │ │ ├── PetInformations │ │ │ └── PetInformations.html │ │ ├── SkillListMH │ │ │ └── SkillListMH.html │ │ ├── Inventory │ │ │ └── InventoryV0 │ │ │ │ └── InventoryV0.html │ │ ├── PlayerViewEquip │ │ │ └── PlayerViewEquipV0 │ │ │ │ └── PlayerViewEquipV0.html │ │ ├── PartyFriends │ │ │ └── PartyHelper.css │ │ ├── ChatBox │ │ │ └── ChatBox.html │ │ ├── Sense │ │ │ └── Sense.css │ │ └── ItemReform │ │ │ └── ItemReform.html │ └── Common.css ├── Vendors │ └── jquery.js ├── DB │ ├── Skills │ │ └── SkillDescription.js │ ├── Items │ │ ├── ShieldTable.js │ │ ├── ItemType.js │ │ └── EquipmentLocation.js │ ├── Pets │ │ ├── PetHungryState.js │ │ ├── PetFriendlyState.js │ │ └── PetMessageConst.js │ ├── Jobs │ │ ├── HairIndexTable.js │ │ └── MountTable.js │ └── Effects │ │ └── WeatherEffect.js ├── Preferences │ ├── Camera.js │ ├── Controls.js │ ├── Audio.js │ ├── Graphics.js │ └── Map.js ├── Utils │ ├── colors.js │ ├── HTMLEntity.js │ ├── partyColors.js │ ├── Base62.js │ └── Queue.js ├── App │ ├── GrfViewer.js │ ├── StrViewer.js │ ├── ModelViewer.js │ └── GrannyModelViewer.js ├── Engine │ ├── MapEngine │ │ ├── PCGoldTimer.js │ │ ├── Achievement.js │ │ └── CashShop.js │ └── SessionStorage.js ├── Controls │ └── MouseEventHandler.js └── Renderer │ ├── Map │ └── Sounds.js │ └── Entity │ └── EntityAnimations.js ├── .editorconfig ├── .vscode └── tasks.json ├── docker-compose.yaml ├── .gitignore ├── .github └── ISSUE_TEMPLATE │ ├── missing-feature.md │ ├── bug_report.md │ └── other.md ├── .gitattributes ├── Dockerfile └── package.json /doc/img/client-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/doc/img/client-list.png -------------------------------------------------------------------------------- /doc/img/start-tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/doc/img/start-tools.png -------------------------------------------------------------------------------- /applications/nwjs/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/applications/nwjs/icon.png -------------------------------------------------------------------------------- /applications/pwa/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/applications/pwa/icon.png -------------------------------------------------------------------------------- /doc/img/ro-browser-dev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/doc/img/ro-browser-dev.png -------------------------------------------------------------------------------- /doc/img/start-ai-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/doc/img/start-ai-error.png -------------------------------------------------------------------------------- /doc/img/browser-console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/doc/img/browser-console.png -------------------------------------------------------------------------------- /doc/img/start-robrowser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/doc/img/start-robrowser.png -------------------------------------------------------------------------------- /src/UI/Components/ItemObtain/ItemObtain.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
-------------------------------------------------------------------------------- /doc/img/ro-browser-app-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/doc/img/ro-browser-app-flow.png -------------------------------------------------------------------------------- /doc/img/start-http-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/doc/img/start-http-server.png -------------------------------------------------------------------------------- /src/UI/Components/Quest/Quest/QuestWindow.html: -------------------------------------------------------------------------------- 1 |
2 | 4 |
-------------------------------------------------------------------------------- /applications/tools/build/thread.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/applications/tools/build/thread.png -------------------------------------------------------------------------------- /src/UI/Components/Error/angeling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Error/angeling.png -------------------------------------------------------------------------------- /applications/browser-examples/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/applications/browser-examples/icon.png -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/box.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/box.jpg -------------------------------------------------------------------------------- /applications/tools/converter/arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/applications/tools/converter/arrow-up.png -------------------------------------------------------------------------------- /applications/tools/converter/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/applications/tools/converter/loading.gif -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/3d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/3d.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/fx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/fx.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/gr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/gr2.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/img.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/map.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/txt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/txt.png -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/about.png -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/delete.png -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/icon.png -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/play.png -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/ribbon.png -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/save.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/save.jpg -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/audio.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/file.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/load.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/load.gif -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/loading.gif -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/settings.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/arw-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/arw-left.png -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/add-server.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/add-server.jpg -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/background.jpg -------------------------------------------------------------------------------- /src/UI/Components/Intro/images/play-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/Intro/images/play-down.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/arw-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/arw-right.png -------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/Icons/directory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrAntares/roBrowserLegacy/HEAD/src/UI/Components/GrfViewer/Icons/directory.png -------------------------------------------------------------------------------- /src/UI/Components/FPS/FPS.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
-- FPS
4 |
5 |
6 | -------------------------------------------------------------------------------- /src/UI/Components/Rodex/RodexIcon.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
-------------------------------------------------------------------------------- /src/UI/Components/EntityRoom/EntityRoom.html: -------------------------------------------------------------------------------- 1 |
2 | 7 |
-------------------------------------------------------------------------------- /src/UI/Components/MapName/MapName.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | -------------------------------------------------------------------------------- /src/UI/Components/EntitySignboard/EntitySignboard.html: -------------------------------------------------------------------------------- 1 |
2 | 6 |
-------------------------------------------------------------------------------- /src/UI/Components/Rodex/RodexIcon.css: -------------------------------------------------------------------------------- 1 | #RodexIcon { width: 43px; height:43px; position:absolute; right:200px; top:20px; } 2 | .rodex-icon { width: 43px; height:43px; border: none; background-color: transparent; background-repeat: no-repeat; } 3 | -------------------------------------------------------------------------------- /src/UI/Components/PCGoldTimer/PCGoldTimer.html: -------------------------------------------------------------------------------- 1 |
2 | 6 |
-------------------------------------------------------------------------------- /src/UI/Components/SkillDescription/SkillDescription.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
-------------------------------------------------------------------------------- /src/UI/Components/WinPopup/WinPopup.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | -------------------------------------------------------------------------------- /src/UI/Components/WinLogin/WinLoginV2/WinLoginV2Background.css: -------------------------------------------------------------------------------- 1 | #login_background { position: absolute; top:0px; left: 0px; width: 100%; height: 100%; z-index: 0; } 2 | #login_background .login_background_image { float:left; width: 25%; height: 33.3%; background-size: 100% 100%; } -------------------------------------------------------------------------------- /src/UI/Components/InputBox/InputBox.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
Input number
4 | 5 | 6 |
7 |
-------------------------------------------------------------------------------- /src/UI/Components/FPS/FPS.css: -------------------------------------------------------------------------------- 1 | #FPS { position:absolute; top:100px; left:100px; font-size:12px; background:white; border-radius:2px; } 2 | #FPS .titlebar { width:100%; height:17px; background-color:white; background-repeat:repeat-x; border-radius:3px 3px 0px 0px; } 3 | #FPS .titlebar .left { margin-left:3px; float:left; } 4 | -------------------------------------------------------------------------------- /src/UI/Components/StrViewer/StrViewer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | Error Occurred:
7 | Your browser doesn't seems to support WebGL or your graphic card isn't up to date. 8 |
9 |
-------------------------------------------------------------------------------- /src/UI/Components/ModelViewer/ModelViewer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | Error Occurred:
7 | Your browser doesn't seems to support WebGL or your graphic card isn't up to date. 8 |
9 |
-------------------------------------------------------------------------------- /src/UI/Components/ItemObtain/ItemObtain.css: -------------------------------------------------------------------------------- 1 | #ItemObtain { position:absolute; top:50px; width:auto; border-radius:5px; background:white; padding:2px; letter-spacing:0px; } 2 | #ItemObtain .content { border:1px solid #c1c6c2; height:25px; padding-left:10px; padding-right:15px; border-radius:5px; } 3 | #ItemObtain img { vertical-align:-6px; } -------------------------------------------------------------------------------- /src/UI/Components/GrannyModelViewer/GrannyModelViewer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | Error Occurred:
7 | Your browser doesn't seems to support WebGL or your graphic card isn't up to date. 8 |
9 |
10 | -------------------------------------------------------------------------------- /src/Vendors/jquery.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Vendors/jquery.js 3 | * 4 | * jQuery support for AMD is bad, have to use a hack to get it work 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | 11 | define( ['jquery'], function( jQuery ){ 12 | return jQuery.noConflict( true ); 13 | }); 14 | -------------------------------------------------------------------------------- /src/UI/Components/MiniMap/MiniMap/MiniMap.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
-------------------------------------------------------------------------------- /src/UI/Components/EffectViewer/EffectViewer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
 
4 | 5 |
6 |
7 | Error Occurred:
8 | Your browser doesn't seems to support WebGL or your graphic card isn't up to date. 9 |
10 |
-------------------------------------------------------------------------------- /src/DB/Skills/SkillDescription.js: -------------------------------------------------------------------------------- 1 | /** 2 | * DB/Skills/SkillDescription.js 3 | * 4 | * Skill Description Table 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | 11 | define(["./SkillConst"], function( SKID ) 12 | { 13 | "use strict"; 14 | 15 | var SkillDescription = {}; 16 | 17 | return SkillDescription; 18 | }); 19 | -------------------------------------------------------------------------------- /src/UI/Components/Error/Error.html: -------------------------------------------------------------------------------- 1 |
2 |

Whoops !

3 |

Sorry, it looks like something went wrong and an error occurred.
4 | If this message popup during roBrowser's initialization it's probably due to some new technologies not supported by your web browser yet, please try to upgrade it.

5 |

Technical Information :

6 |
7 |
8 |
-------------------------------------------------------------------------------- /src/UI/Common.css: -------------------------------------------------------------------------------- 1 | /* Avoid input focus border */ 2 | :focus {outline:none;} 3 | ::-moz-focus-inner {border:0;} 4 | 5 | * { -moz-user-select:none; } 6 | 7 | html, body { 8 | margin:0; 9 | } 10 | 11 | body { 12 | background-color:black; 13 | font-size:12px; 14 | font-family:Arial; 15 | overflow:hidden; 16 | -webkit-user-select:none; 17 | user-select:none; 18 | } 19 | 20 | button { 21 | padding: 0; 22 | } -------------------------------------------------------------------------------- /src/UI/Components/NpcMenu/NpcMenu.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | 6 | 7 |
8 |
-------------------------------------------------------------------------------- /src/UI/Components/NpcBox/NpcBox.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | 7 |
8 |
9 |
-------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is the top-most EditorConfig file 2 | root = true 3 | 4 | # All Files 5 | [*] 6 | charset = utf-8 7 | indent_style = tab 8 | indent_size = 4 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | # Markdown Files 13 | [*.md] 14 | trim_trailing_whitespace = false 15 | 16 | # Batch Files 17 | [*.{cmd,bat}] 18 | end_of_line = crlf 19 | 20 | # Bash Files 21 | [*.sh] 22 | end_of_line = lf 23 | -------------------------------------------------------------------------------- /src/DB/Items/ShieldTable.js: -------------------------------------------------------------------------------- 1 | /** 2 | * DB/Items/ShieldTable.js 3 | * 4 | * Shield view id table 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | 11 | define(function() 12 | { 13 | "use strict"; 14 | 15 | return { 16 | 1: "\xb0\xa1\xb5\xe5", 17 | 2: "\xb9\xf6\xc5\xac\xb7\xaf", 18 | 3: "\xbd\xaf\xb5\xe5", 19 | 4: "\xb9\xcc\xb7\xaf\xbd\xaf\xb5\xe5" 20 | }; 21 | }); 22 | -------------------------------------------------------------------------------- /src/Preferences/Camera.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Preferences/Camera.js 3 | * 4 | * Camera user preferences 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define( ['Core/Preferences'], function( Preferences ) 11 | { 12 | 'use strict'; 13 | 14 | 15 | /** 16 | * Export 17 | */ 18 | return Preferences.get( 'Camera', { 19 | smooth: true, 20 | zoom: 125.0 21 | }, 1.1 ); 22 | }); 23 | -------------------------------------------------------------------------------- /src/UI/Components/CardIllustration/CardIllustration.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 |
7 |
8 |
9 |
10 |
-------------------------------------------------------------------------------- /src/UI/Components/SkillDescription/SkillDescription.css: -------------------------------------------------------------------------------- 1 | #SkillDescription { position:absolute; border-radius:5px; padding:1px; border:1px solid #c5c5c5; line-height:18px; letter-spacing:0px; } 2 | #SkillDescription .content { padding:5px; border-radius:5px; background-color:white; width:278px; } 3 | #SkillDescription .close { position:absolute; right:3px; top:3px; border:none; width:9px; height:10px; padding:0px; margin:0px; background-repeat:no-repeat; background-color:transparent; } 4 | -------------------------------------------------------------------------------- /src/DB/Pets/PetHungryState.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Pets/PetHungryState.js 3 | * 4 | * Pet Hungry state constant 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author MrUnzO 9 | */ 10 | 11 | define(function() 12 | { 13 | "use strict"; 14 | 15 | return { 16 | PET_HUNGER: 0, 17 | PET_HUNGRY: 1, 18 | PET_SATISFIED: 2, 19 | PET_ENOUGH: 3, 20 | PET_FULL: 4, 21 | }; 22 | }); -------------------------------------------------------------------------------- /src/DB/Pets/PetFriendlyState.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Pets/PetFriendlyState.js 3 | * 4 | * Pet Friendly state constant 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author MrUnzO 9 | */ 10 | 11 | define(function() 12 | { 13 | "use strict"; 14 | 15 | return { 16 | PET_ASHAMED: 0, 17 | PET_AWKWARD: 1, 18 | PET_NORMAL: 2, 19 | PET_FRIENDLY: 3, 20 | PET_FAMILIAR: 4, 21 | }; 22 | }); -------------------------------------------------------------------------------- /src/UI/Components/PCGoldTimer/PCGoldTimer.css: -------------------------------------------------------------------------------- 1 | #PCGoldTimer { width: 54px; height:49px; position:absolute; right:250px; top:10px; } 2 | #PCGoldTimer .container { width: 54px; height:49px; border: none; background-color: transparent; background-repeat: no-repeat; color: white; font-weight: 1000; -webkit-text-stroke: 0.5px; -webkit-text-stroke-color: black; } 3 | #PCGoldTimer .timer-text-value { position: absolute; top: 12px; left: 7px; } 4 | #PCGoldTimer .total-points-value { position: absolute; bottom: 1px; right: 5px; } 5 | -------------------------------------------------------------------------------- /applications/pwa/manifest.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "roBrowser Progressive Web App", 3 | "short_name": "roBrowser", 4 | "start_url": "./", 5 | "description": "roBrowser Progressive Web App.", 6 | "display": "fullscreen", 7 | "theme_color": "#4169e1", 8 | "background_color": "#000000", 9 | "icons": [ 10 | { 11 | "src": "./icon.png", 12 | "sizes": "144x144", 13 | "type": "image/png", 14 | "purpose": "any" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /src/UI/Components/MiniMap/MiniMap/MiniMap.css: -------------------------------------------------------------------------------- 1 | #minimap { position:absolute; top:2px; right:2px; } 2 | #minimap .plus { position:absolute; top: 0px; right:0px; width:12px; height:12px; border:none; background:transparent; } 3 | #minimap .minus { position:absolute; top:12px; right:0px; width:12px; height:12px; border:none; background:transparent; } 4 | 5 | #minimap button.cashshopIcon { 6 | position: absolute; 7 | height: 43px; 8 | width: 43px; 9 | border: none; 10 | top: 0px; 11 | left: -45px; 12 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": 4 | [ 5 | { 6 | "type": "npm", 7 | "group": "build", 8 | "label": "npm: build", 9 | "detail": "node ./tools/builder-web.js", 10 | 11 | "script": "build", 12 | "problemMatcher": [] 13 | }, 14 | { 15 | "type": "npm", 16 | "group": "build", 17 | "label": "npm: build (minified)", 18 | "detail": "node ./tools/builder-web.js -- --all -m", 19 | 20 | "script": "build -- --all -m", 21 | "problemMatcher": [] 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /src/Preferences/Controls.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Preferences/Controls.js 3 | * 4 | * Control user preferences 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define( ['Core/Preferences'], function( Preferences ) 11 | { 12 | 'use strict'; 13 | 14 | 15 | /** 16 | * Export 17 | */ 18 | return Preferences.get( 'Controls', { 19 | noctrl: true, 20 | noshift: false, 21 | snap: false, 22 | itemsnap: false 23 | }, 1.0 ); 24 | 25 | }); 26 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | ro-browser: 3 | build: 4 | context: . 5 | dockerfile: Dockerfile 6 | target: dev 7 | ports: 8 | - "8000:8000" 9 | # You can use to serve wsproxy. 10 | #- "5999:5999" 11 | volumes: 12 | - ./:/app 13 | tty: true 14 | 15 | serve-dist: 16 | build: 17 | context: . 18 | dockerfile: Dockerfile 19 | target: dist-server 20 | ports: 21 | - "8080:8080" 22 | volumes: 23 | - ./dist/Web:/var/www/html 24 | 25 | 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /AI/* 2 | /client/BGM/* 3 | /client/data/* 4 | /client/resources/* 5 | /client/System/* 6 | /dist/ 7 | /node_modules/ 8 | /src/Plugins/*/ 9 | /index.html 10 | /package-lock.json 11 | /GrannyModelViewer.js 12 | /GrfViewer.js 13 | /MapViewer.js 14 | /ModelViewer.js 15 | /Online.js 16 | /StrViewer.js 17 | /ThreadEventHandler.js 18 | /data/* 19 | /save/* 20 | 21 | # IDE files 22 | .idea/ 23 | .vscode/* 24 | !.vscode/settings.json 25 | !.vscode/tasks.json 26 | !.vscode/launch.json 27 | !.vscode/extensions.json 28 | !.vscode/*.code-snippets 29 | -------------------------------------------------------------------------------- /src/UI/Components/WinList/WinList.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 |
7 |
8 |
9 |
10 |
-------------------------------------------------------------------------------- /src/Preferences/Audio.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Preferences/Audio.js 3 | * 4 | * Audio preferences 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define( ['Core/Preferences'], function( Preferences ) 11 | { 12 | 'use strict'; 13 | 14 | 15 | /** 16 | * Export 17 | */ 18 | return Preferences.get( 'Audio', { 19 | 20 | BGM: { 21 | play: true, 22 | volume: 0.5 23 | }, 24 | 25 | Sound: { 26 | play: true, 27 | volume: 0.5 28 | } 29 | 30 | }, 1.0 ); 31 | 32 | }); 33 | -------------------------------------------------------------------------------- /src/Utils/colors.js: -------------------------------------------------------------------------------- 1 | define(function(require) 2 | { 3 | 'use strict'; 4 | 5 | /** 6 | * Convert a uint32 color value from BGR format to RGB format. 7 | * 8 | * @param {number} color - The color value in BGR format as a uint32. 9 | * @return {string} The color value in CSS 'rgb' format. 10 | */ 11 | return function uint32ToRGB(color) { 12 | var red = color & 0xFF; 13 | var green = (color >> 8) & 0xFF; 14 | var blue = (color >> 16) & 0xFF; 15 | return `rgb(${red},${green},${blue})`; 16 | } 17 | }); 18 | 19 | 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/missing-feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Missing feature 3 | about: Let us know what is missing 4 | title: '' 5 | labels: Missing Feature 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Missing feature** 11 | Please describe the missing feature. 12 | 13 | **Screenshots (if applicable)** 14 | Please provide some screenshots. 15 | 16 | **Client Versions** 17 | - What client version was it introduced in 18 | - Up to what client version was it live (when was it removed/changed to something else) 19 | 20 | **Packets** 21 | If you know the related packets, please provide them. 22 | -------------------------------------------------------------------------------- /src/UI/Components/ItemSelection/ItemSelection.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | 7 | 8 |
9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: Bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **Screenshots (if applicable)** 14 | Add screenshots to help explain your problem. 15 | 16 | **Packet/Client version** 17 | Packet/Client version you use. 18 | 19 | **Browser/device info** 20 | - Browser: [e.g. stock browser, safari] 21 | - Device: [e.g. iPhone6] 22 | 23 | **Additional context** 24 | Add any other context about the problem here. 25 | -------------------------------------------------------------------------------- /src/DB/Jobs/HairIndexTable.js: -------------------------------------------------------------------------------- 1 | /** 2 | * DB/Jobs/HairIndexTable.js 3 | * 4 | * The client is using a look up table to find the correct hair style based on an ID 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | 11 | define(function() 12 | { 13 | "use strict"; 14 | 15 | return [ 16 | // Human_F 17 | [2, 2, 4, 7, 1, 5, 3, 6, 12, 10, 9, 11, 8], 18 | 19 | // Human_M 20 | [2, 2, 1, 7, 5, 4, 3, 6, 8, 9, 10, 12, 11], 21 | 22 | // Doram_F 23 | [0, 1, 2, 3, 4, 5, 6], 24 | 25 | // Doram_M 26 | [0, 1, 2, 3, 4, 5, 6] 27 | ]; 28 | }); 29 | -------------------------------------------------------------------------------- /src/UI/Components/MakeArrowSelection/MakeArrowSelection.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | 7 | 8 |
9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /applications/nwjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "robrowser", 3 | "main": "index.html", 4 | "version": "1.0.0", 5 | "author": "Vincent Thibault", 6 | "license": "GNU GPL V3", 7 | "build": { 8 | "nwVersion": "stable", 9 | "output": "./dist/Desktop", 10 | "packed": true, 11 | "targets": "zip", 12 | "files": [ 13 | "**/*" 14 | ] 15 | }, 16 | "chromium-args": "--enable-webgl --ignore-gpu-blacklist --enable-node-worker --user-data-dir=save --disable-raf-throttling", 17 | "window": { 18 | "width": 1024, 19 | "height": 768, 20 | "fullscreen": false, 21 | "frame": true, 22 | "icon": "icon.png" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/DB/Items/ItemType.js: -------------------------------------------------------------------------------- 1 | /** 2 | * DB/Items/ItemType.js 3 | * 4 | * Item type constant 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | 11 | define(function() 12 | { 13 | "use strict"; 14 | 15 | 16 | return { 17 | HEALING: 0, 18 | UNKNOWN: 1, 19 | USABLE: 2, 20 | ETC: 3, 21 | ARMOR: 4, 22 | WEAPON: 5, 23 | CARD: 6, 24 | PETEGG: 7, 25 | PETARMOR: 8, 26 | AMMO: 10, 27 | DELAYCONSUME: 11, 28 | SHADOWGEAR: 12, 29 | CASH: 18 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /src/UI/Components/RefineWeaponSelection/RefineWeaponSelection.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | 7 | 8 |
9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/other.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Other 3 | about: Let us know any other issue 4 | title: '' 5 | labels: Enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the issue** 11 | A clear and concise description of what the issue is. 12 | 13 | **Screenshots (if applicable)** 14 | Add screenshots to help explain your problem. 15 | 16 | **Packet/Client version (if applicable)** 17 | Packet/Client version you use. 18 | 19 | **Browser/device info (if applicable)** 20 | - Browser: [e.g. stock browser, safari] 21 | - Device: [e.g. iPhone6] 22 | 23 | **Additional context** 24 | Add any other context about the problem here. 25 | -------------------------------------------------------------------------------- /applications/tools/tests/altitude.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 22 | 23 | -------------------------------------------------------------------------------- /src/UI/Components/ContextMenu/ContextMenu.css: -------------------------------------------------------------------------------- 1 | #ContextMenu { 2 | position:fixed; 3 | top:0px; 4 | left:0px; 5 | width:100%; 6 | height:100%; 7 | z-index:1000; 8 | } 9 | #ContextMenu .menu { 10 | position:absolute; 11 | background-color:white; 12 | border-radius:5px; 13 | padding:2px; 14 | } 15 | 16 | #ContextMenu .menu hr { 17 | background-color:#cecece; 18 | height:1px; 19 | border:none; 20 | margin: 2px; 21 | } 22 | 23 | #ContextMenu .menu div { 24 | font-size:12px; 25 | color:black; 26 | white-space:nowrap; 27 | padding:1px; 28 | height:14px; 29 | } 30 | 31 | #ContextMenu .menu div:hover { 32 | background-color:#739cef; 33 | } -------------------------------------------------------------------------------- /src/UI/Components/Quest/QuestV1/QuestHelperV1.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
title
6 |
summary
7 |
objective
8 |
monster
9 |
killed
10 |
limited
11 |
12 |
13 |
-------------------------------------------------------------------------------- /src/UI/Components/MakeItemSelection/MakeItemSelection.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | 7 | 8 |
9 |
10 |
11 |
12 |
13 |
-------------------------------------------------------------------------------- /src/DB/Pets/PetMessageConst.js: -------------------------------------------------------------------------------- 1 | /** 2 | * DB/PetMessageConst.js 3 | * 4 | * Pet Action constant 5 | * 6 | * This file is part of ROBrowser, 7 | * (http://www.robrowser.com/). 8 | * 9 | * @author MrUnzO 10 | */ 11 | 12 | define(function() 13 | { 14 | "use strict"; 15 | 16 | return { 17 | PM_FEEDING: 0, 18 | PM_HUNTING: 1, 19 | PM_DANGER: 2, 20 | PM_DEAD: 3, 21 | PM_NORMAL: 4, 22 | PM_PERFORMANCE_S: 5, 23 | PM_LEVELUP: 6, 24 | PM_PERFORMANCE1: 7, 25 | PM_PERFORMANCE2: 8, 26 | PM_PERFORMANCE3: 9, 27 | PM_CONNENCT: 10 28 | }; 29 | }); -------------------------------------------------------------------------------- /applications/tools/tests/str.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 29 | 30 | -------------------------------------------------------------------------------- /applications/tools/tests/action.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 29 | 30 | -------------------------------------------------------------------------------- /src/UI/Components/StatusIcons/StatusIcons.css: -------------------------------------------------------------------------------- 1 | #StatusIcons { 2 | display:block; 3 | position: absolute; 4 | top:166px; 5 | right:20px; 6 | z-index:50; 7 | } 8 | 9 | #StatusIcons .state { 10 | position:absolute; 11 | } 12 | 13 | #StatusIcons .state .description { 14 | display:none; 15 | z-index:51; 16 | position:absolute; 17 | right:33px; 18 | top:0px; 19 | padding: 0px 5px 0px 5px; 20 | background-color:rgba(0,0,0,0.5); 21 | border:1px solid #c6c6c6; 22 | border-radius:3px; 23 | color:white; 24 | text-shadow:1px 1px black; 25 | white-space:nowrap; 26 | font-size:11px; 27 | line-height:16px; 28 | } 29 | 30 | #StatusIcons .state:hover .description { 31 | display:block; 32 | } 33 | 34 | #StatusIcons .state canvas { 35 | width:32px; 36 | height:32px; 37 | } 38 | -------------------------------------------------------------------------------- /src/UI/Components/WinPopup/WinPopup.css: -------------------------------------------------------------------------------- 1 | #win_popup { position:absolute; width:280px; height:120px; z-index:999; } 2 | 3 | #win_popup .container { 4 | position: absolute; 5 | height: 70px; 6 | width: 270px; 7 | top: 20px; 8 | overflow: auto; 9 | } 10 | 11 | #win_popup .text { padding:5px 10px 0px 10px; } 12 | 13 | #win_popup .buttonscontainer { 14 | position: absolute; 15 | height: 25px; 16 | width: 280px; 17 | top: 95px; 18 | } 19 | 20 | #win_popup .btns { position:absolute; bottom:2px; right:3px; } 21 | #win_popup .btn { border:0; width:42px; height:20px; bottom:4px; margin-left:3px; background-repeat:no-repeat; background-color:transparent; } 22 | 23 | .win_popup_overlay { position:fixed; top:0px; left:0px; width:100%; height:100%; z-index:99; } -------------------------------------------------------------------------------- /src/UI/Components/WinStats/WinStatsV1/WinStatsV1.css: -------------------------------------------------------------------------------- 1 | #WinStatsV1 { position:absolute; width:280px; height:103px; background-color:transparent; background-repeat:no-repeat; font-size:11px; } 2 | #WinStatsV1 .group { position:absolute; top:6px; } 3 | #WinStatsV1 .group div { height:16px; display:block;} 4 | #WinStatsV1 .stats { left:37px; } 5 | #WinStatsV1 .bonus { left:58px; } 6 | #WinStatsV1 .requirements { left:90px; text-align:right; width:12px; } 7 | #WinStatsV1 .column1 { top:5px; right:87px; text-align:right; } 8 | #WinStatsV1 .column2 { top:5px; right:5px; text-align:right; } 9 | #WinStatsV1 .up { left:80px; top:2px; } 10 | #WinStatsV1 .up button { display:block; margin-top:5px; border:none; width:11px; height:11px; background-color:transparent; background-repeat:no-repeat; } 11 | -------------------------------------------------------------------------------- /applications/tools/tests/ground.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 30 | 31 | -------------------------------------------------------------------------------- /applications/tools/tests/world.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 30 | 31 | -------------------------------------------------------------------------------- /applications/tools/tests/sprites.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 30 | 31 | -------------------------------------------------------------------------------- /src/UI/Components/MiniMap/MiniMap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/MiniMap/MiniMap.js 3 | * 4 | * MiniMap windows 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | */ 9 | define(function (require) 10 | { 11 | 'use strict'; 12 | 13 | var publicName = 'MiniMap'; 14 | 15 | var MiniMap = require('./MiniMap/MiniMap'); 16 | var MiniMapV2 = require('./MiniMapV2/MiniMapV2'); 17 | 18 | var UIVersionManager = require('UI/UIVersionManager'); 19 | 20 | var versionInfo = { 21 | default: MiniMap, 22 | common: { 23 | 20180124: MiniMapV2, 24 | }, 25 | re: { 26 | 27 | }, 28 | prere:{ 29 | 30 | } 31 | }; 32 | 33 | var Controller = UIVersionManager.getUIController(publicName, versionInfo); 34 | 35 | return Controller; 36 | }); -------------------------------------------------------------------------------- /src/UI/Components/StrViewer/StrViewer.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color:#45484d; 3 | font-family:Arial; 4 | font-size:12px; 5 | margin:0; 6 | overflow:hidden; 7 | } 8 | #StrViewer .warning { 9 | display:none; 10 | } 11 | #StrViewer .info { 12 | text-align:center; 13 | width:100%; 14 | color:white; 15 | margin-top:50px; 16 | position:absolute; 17 | } 18 | #StrViewer canvas { 19 | position:absolute; 20 | top:0px; 21 | left:0px; 22 | } 23 | #StrViewer #run_msg { 24 | position:absolute; 25 | right:10px; 26 | top:12px; 27 | text-align:right; 28 | color:#fa5; 29 | } 30 | #StrViewer .head { 31 | position:absolute; 32 | width:100%; 33 | height:40px; 34 | background: #222; 35 | z-index:100; 36 | display:none; 37 | } 38 | #StrViewer .head select { 39 | position:relative; 40 | top: 8px; 41 | left:5px; 42 | } -------------------------------------------------------------------------------- /src/UI/Components/InputBox/InputBox.css: -------------------------------------------------------------------------------- 1 | #inputbox { position:absolute; width:274px; height:44px; border-radius:5px; background-color:white; padding:2px; z-index:1000; } 2 | #inputbox .border { border-radius:5px; border:1px solid #c1c6c2; width:262px; height:37px; padding-top:5px; padding-left:10px; } 3 | #inputbox .text { border-radius:5px; width:270px; height:13px; overflow:hidden; } 4 | #inputbox input { border:0; background-color:#efefef; width:203px; height:16px; margin-top:3px; } 5 | #inputbox button { border:0; width:42px; height:20px; position:absolute; bottom:13px; right:10px; background-repeat:no-repeat; background-color:transparent; } 6 | 7 | #inputbox.number { width:174px; } 8 | #inputbox.number .border { width:162px; } 9 | #inputbox.number .text { width:170px; } 10 | #inputbox.number input { width:103px; } 11 | -------------------------------------------------------------------------------- /src/UI/Components/WinLogin/WinLogin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/WinLogin/WinLogin.js 3 | * 4 | * Login Window 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | */ 9 | define(function (require) 10 | { 11 | 'use strict'; 12 | 13 | var publicName = 'WinLogin'; 14 | 15 | var WinLogin = require('./WinLogin/WinLogin'); 16 | var WinLoginV2 = require('./WinLoginV2/WinLoginV2'); 17 | 18 | var UIVersionManager = require('UI/UIVersionManager'); 19 | 20 | var versionInfo = { 21 | default: WinLogin, 22 | common: { 23 | 20181114: WinLoginV2 24 | }, 25 | re: { 26 | 27 | }, 28 | prere:{ 29 | 30 | } 31 | }; 32 | 33 | var Controller = UIVersionManager.getUIController(publicName, versionInfo); 34 | 35 | return Controller; 36 | }); -------------------------------------------------------------------------------- /applications/tools/build/readme.md: -------------------------------------------------------------------------------- 1 | Compiling scripts 2 | ================= 3 | 4 | roBrowser contains hundred of files, loading them in a production server taken just too much time. 5 | This directory will help merging all project's files to a new one, optimized, and compressed. 6 | 7 | ###Utilization### 8 | 9 | Open the file *"index.html"* in your web browser and **select the Application** you want to compile (*Online*, *GrfViewer*, *ModelViewer*, *MapViewer*, *Thread*). 10 | 11 | Once the compilation done, you can save the generated file to the specified location. 12 | 13 | **Note: All applications required the *Thread* application compiled.** 14 | 15 | ###Configure roBrowser### 16 | 17 | To use the compiled version of roBrowser, go to your configuration object (called *ROConfig*) and set the parameter *development* to **false**. -------------------------------------------------------------------------------- /src/UI/Components/ModelViewer/ModelViewer.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color:#45484d; 3 | font-family:Arial; 4 | font-size:12px; 5 | margin:0; 6 | overflow:hidden; 7 | } 8 | #ModelViewer .warning { 9 | display:none; 10 | } 11 | #ModelViewer .info { 12 | text-align:center; 13 | width:100%; 14 | color:white; 15 | margin-top:50px; 16 | position:absolute; 17 | } 18 | #ModelViewer canvas { 19 | position:absolute; 20 | top:0px; 21 | left:0px; 22 | } 23 | #ModelViewer #run_msg { 24 | position:absolute; 25 | right:10px; 26 | top:12px; 27 | text-align:right; 28 | color:#fa5; 29 | } 30 | #ModelViewer .head { 31 | position:absolute; 32 | width:100%; 33 | height:40px; 34 | background: #222; 35 | z-index:100; 36 | display:none; 37 | } 38 | #ModelViewer .head select { 39 | position:relative; 40 | top: 8px; 41 | left:5px; 42 | } -------------------------------------------------------------------------------- /src/UI/Components/EffectViewer/EffectViewer.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color:#45484d; 3 | font-family:Arial; 4 | font-size:12px; 5 | margin:0; 6 | overflow:hidden; 7 | } 8 | #EffectViewer .warning { 9 | display:none; 10 | } 11 | #EffectViewer .info { 12 | text-align:center; 13 | width:100%; 14 | color:white; 15 | margin-top:50px; 16 | position:absolute; 17 | } 18 | #EffectViewer canvas { 19 | position:absolute; 20 | top:0px; 21 | left:0px; 22 | } 23 | #EffectViewer #run_msg { 24 | position:absolute; 25 | right:10px; 26 | top:12px; 27 | text-align:right; 28 | color:#fa5; 29 | } 30 | #EffectViewer .head { 31 | position:absolute; 32 | width:100%; 33 | height:40px; 34 | background: #222; 35 | z-index:100; 36 | display:none; 37 | } 38 | #EffectViewer .head div { 39 | position:relative; 40 | top: 8px; 41 | left:5px; 42 | } -------------------------------------------------------------------------------- /src/UI/Components/Vending/VendingModelMessage/VendingModelMessage.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 | Message 7 |
8 |
9 |
10 |
11 |
12 | 13 |
14 |
15 | 16 |
17 |
18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /applications/tools/tests/targa.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 31 | 32 | -------------------------------------------------------------------------------- /src/UI/Components/ChatRoom/ChatRoom.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | () 5 |
6 |
7 | 8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 19 | 20 |
21 |
22 |
-------------------------------------------------------------------------------- /src/UI/Components/MakeReadBook/MakeReadBook.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | (1/3) 5 |
6 |
7 |
8 |
9 |
10 | Bookmark 11 |
12 |
13 | Previous 14 | Next 15 |
16 |
17 |
18 |

19 | 		
20 | 22 |
23 |
24 | 25 | -------------------------------------------------------------------------------- /src/UI/Components/Emoticons/Emoticons.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | Emotion icon List 6 |
7 |
8 | 9 |
10 |
11 |
12 |
13 |
14 | 19 |
-------------------------------------------------------------------------------- /src/UI/Components/Escape/Escape.css: -------------------------------------------------------------------------------- 1 | #Escape { 2 | display: none; 3 | position: absolute; 4 | border-radius:5px; 5 | background-color: white; 6 | background-repeat:no-repeat; 7 | } 8 | 9 | #Escape .top .node { 10 | width: 11px; 11 | height: 11px; 12 | position:absolute; 13 | top:3px; 14 | left:4px; 15 | border:none; 16 | background-color:transparent; 17 | background-repeat:no-repeat; 18 | } 19 | 20 | #Escape .top .title { 21 | position:absolute; 22 | top:2px; 23 | left:18px; 24 | text-shadow:1px 1px white; 25 | white-space:nowrap; 26 | } 27 | 28 | #Escape .container { 29 | width:220px; 30 | height:auto; 31 | padding:20px 30px 6px 30px; 32 | } 33 | 34 | #Escape .container button { 35 | width:221px; 36 | height:20px; 37 | margin-top:3px; 38 | border:none; 39 | background-color:transparent; 40 | background-repeat:no-repeat; 41 | } -------------------------------------------------------------------------------- /src/Utils/HTMLEntity.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Utils/HTMLEntity.js 3 | * 4 | * This is a plugin for ROBrowser to decode HTML entities. 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Alisonrag 9 | */ 10 | 11 | define(function () { 12 | "use strict"; 13 | 14 | function decodeHTMLEntities(str) { 15 | // this prevents any overhead from creating the object each time 16 | let element = document.createElement("div"); 17 | if (str && typeof str === "string") { 18 | // strip script tags 19 | str = str.replace(/]*>([\S\s]*?)<\/script>/gim, ""); 20 | element.innerHTML = str; 21 | str = element.textContent; 22 | element.textContent = ""; 23 | } 24 | 25 | return str; 26 | } 27 | 28 | /** 29 | * Export 30 | */ 31 | return { 32 | decodeHTMLEntities: decodeHTMLEntities, 33 | }; 34 | }); 35 | -------------------------------------------------------------------------------- /src/UI/Components/CardIllustration/CardIllustration.css: -------------------------------------------------------------------------------- 1 | #CardIllustration { position:absolute; top:100px; left:100px; } 2 | #CardIllustration .titlebar { width:100%; height:17px; background-color:white; background-repeat:repeat-x; border-radius:3px 3px 0px 0px; } 3 | #CardIllustration .titlebar .close { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle; } 4 | #CardIllustration .titlebar .text { text-shadow:1px 1px white; vertical-align:-2px; white-space:nowrap;/* chrome bug */ display: inline-block; width: 32px; height:13px; font-size:12px; } 5 | 6 | #CardIllustration .titlebar .left { margin-left:3px; float:left; } 7 | #CardIllustration .titlebar .right { float:right; margin-right:3px;} 8 | #CardIllustration .titlebar .clear { clear:both; } 9 | 10 | #CardIllustration .content { width:300px; height:400px; } -------------------------------------------------------------------------------- /src/UI/Components/GrannyModelViewer/GrannyModelViewer.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color:#45484d; 3 | font-family:Arial; 4 | font-size:12px; 5 | margin:0; 6 | overflow:hidden; 7 | } 8 | #GrannyModelViewer .warning { 9 | display:none; 10 | } 11 | #GrannyModelViewer .info { 12 | text-align:center; 13 | width:100%; 14 | color:white; 15 | margin-top:50px; 16 | position:absolute; 17 | } 18 | #GrannyModelViewer canvas { 19 | position:absolute; 20 | top:0px; 21 | left:0px; 22 | } 23 | #GrannyModelViewer #run_msg { 24 | position:absolute; 25 | right:10px; 26 | top:12px; 27 | text-align:right; 28 | color:#fa5; 29 | } 30 | #GrannyModelViewer .head { 31 | position:absolute; 32 | width:100%; 33 | height:40px; 34 | background: #222; 35 | z-index:100; 36 | display:none; 37 | } 38 | #GrannyModelViewer .head select { 39 | position:relative; 40 | top: 8px; 41 | left:5px; 42 | } 43 | -------------------------------------------------------------------------------- /src/UI/Components/SoundOption/SoundOption.css: -------------------------------------------------------------------------------- 1 | #SoundOption { position:absolute; top:100px; left:100px; font-size:12px; background:white; border-radius:2px; } 2 | 3 | #SoundOption .titlebar { width:100%; height:17px; background-color:white; background-repeat:repeat-x; border-radius:3px 3px 0px 0px; } 4 | #SoundOption .titlebar .base { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle; } 5 | #SoundOption .titlebar .text { text-shadow:1px 1px white; vertical-align:-2px; white-space:nowrap; 6 | /* chrome bug */ display: inline-block; white-space:nowrap; height:13px; } 7 | 8 | #SoundOption .titlebar .left { margin-left:3px; float:left; } 9 | #SoundOption .titlebar .right { float:right; margin-right:3px;} 10 | #SoundOption .titlebar .clear { clear:both; } 11 | 12 | #SoundOption .panel { padding-left:5px; padding-right:5px; } -------------------------------------------------------------------------------- /src/UI/Components/GraphicsOption/GraphicsOption.css: -------------------------------------------------------------------------------- 1 | #GraphicsOption { position:absolute; top:100px; left:100px; font-size:12px; background:white; border-radius:2px; } 2 | 3 | #GraphicsOption .titlebar { width:100%; height:17px; background-color:white; background-repeat:repeat-x; border-radius:3px 3px 0px 0px; } 4 | #GraphicsOption .titlebar .base { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle; } 5 | #GraphicsOption .titlebar .text { text-shadow:1px 1px white; vertical-align:-2px; white-space:nowrap; 6 | /* chrome bug */ display: inline-block; white-space:nowrap; height:13px; } 7 | 8 | #GraphicsOption .titlebar .left { margin-left:3px; float:left; } 9 | #GraphicsOption .titlebar .right { float:right; margin-right:3px;} 10 | #GraphicsOption .titlebar .clear { clear:both; } 11 | 12 | #GraphicsOption .panel { padding-left:5px; padding-right:5px; } -------------------------------------------------------------------------------- /src/UI/Components/WinList/WinList.css: -------------------------------------------------------------------------------- 1 | #serverlist { z-index:100; position:absolute; width:280px; height:200px; } 2 | #serverlist .head { position:absolute; width:280px; height:22px; top:0px; left:0px; } 3 | #serverlist .bottom { position:relative; width:280px; height:120px; top:80px; left:0px; } 4 | 5 | #serverlist .content { position:absolute; width:258px; height:145px; top:22px; left:0px; padding-left:10px; padding-right:10px; background-color:white; border-left:1px solid #c7c7c7; border-right:1px solid #c7c7c7; } 6 | #serverlist .list { background-color:#f7f7f7; height:145px; width:260px; font-size:12px; } 7 | #serverlist .menu_node { width:255px; height:15px; display:block; padding-top:2px; padding-left:5px; } 8 | 9 | #serverlist .btn { position:absolute; bottom:0px; border:0; width:42px; height:20px; bottom:4px; background-color:transparent; } 10 | #serverlist .ok { right: 50px; } 11 | #serverlist .cancel { right: 5px; } -------------------------------------------------------------------------------- /src/Utils/partyColors.js: -------------------------------------------------------------------------------- 1 | define(function(require) 2 | { 3 | 'use strict'; 4 | 5 | function pastel_colour(seed) { 6 | var baseRed = 0; 7 | var baseGreen = 0; 8 | var baseBlue = 0; 9 | 10 | var rand_1 = Math.abs((Math.sin(seed++) * 10000)) % 256; 11 | var rand_2 = Math.abs((Math.sin(seed++) * 10000)) % 256; 12 | var rand_3 = Math.abs((Math.sin(seed++) * 10000)) % 256; 13 | 14 | //build colour 15 | var red = Math.round((rand_1 + baseRed) / 2); 16 | var green = Math.round((rand_2 + baseGreen) / 2); 17 | var blue = Math.round((rand_3 + baseBlue) / 2); 18 | 19 | return { red: red, green: green, blue: blue }; 20 | } 21 | 22 | 23 | return function(aid){ 24 | var rv = pastel_colour(aid); 25 | 26 | rv.style = 'rgb(' + rv.red + ', ' + rv.green + ', ' + rv.blue + ')'; 27 | return rv; 28 | } 29 | }); 30 | -------------------------------------------------------------------------------- /src/UI/Components/VendingShop/VendingShop.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |
8 |
9 |
10 | 11 | 12 | 18 | 19 | 20 | 25 | 26 |
13 |
14 |
15 |
16 |
17 |
27 |
28 |
29 | -------------------------------------------------------------------------------- /src/Preferences/Graphics.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Preferences/Graphics.js 3 | * 4 | * Graphics preferences 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define( ['Core/Preferences'], function( Preferences ) 11 | { 12 | 'use strict'; 13 | 14 | 15 | /** 16 | * Export 17 | */ 18 | return Preferences.get( 'Graphics', { 19 | 20 | /** 21 | * Game size 22 | */ 23 | screensize: '800x600', 24 | 25 | /* 26 | * Game quality detail 27 | * 100: Full 28 | */ 29 | quality: 100, 30 | 31 | 32 | /** 33 | * Do we show official game cursor ? 34 | */ 35 | cursor: true, 36 | 37 | 38 | /** 39 | * Game FPS Limit 40 | */ 41 | fpslimit: 60, 42 | 43 | /** 44 | * Game Post-Processing 45 | */ 46 | bloom: false, 47 | bloomIntensity: 0.5, 48 | 49 | pixelPerfectSprites: false 50 | }, 1.1 ); 51 | 52 | }); 53 | -------------------------------------------------------------------------------- /src/UI/Components/NpcBox/NpcBox.css: -------------------------------------------------------------------------------- 1 | #NpcBox { position:absolute; top:100px; left:100px; width:276px; height:176px; border-radius:5px; background:white; padding:2px; line-height:18px; letter-spacing:0px; } 2 | #NpcBox .border { border:1px solid #c1c6c2; width:264px; height:164px; padding:5px; border-radius:5px; } 3 | #NpcBox .content { white-space:pre-wrap; background-color:#eff4f0; width:254px; height:130px; overflow-y:auto; padding:5px; } 4 | #NpcBox .btns { position:absolute; bottom: 2px; right:8px; } 5 | #NpcBox .btn { border:0; width:42px; height:20px; bottom:4px; background-repeat:no-repeat; background-color:transparent; display:none; } 6 | 7 | .item-link { 8 | color: #0070C0; 9 | cursor: pointer; 10 | } 11 | 12 | .item-link:hover { 13 | color: #00A0FF; 14 | } 15 | 16 | .navi-link { 17 | color: #C00000; 18 | cursor: pointer; 19 | text-decoration: underline; 20 | } 21 | 22 | .navi-link:hover { 23 | color: #FF0000; 24 | } 25 | -------------------------------------------------------------------------------- /src/UI/Components/Quest/Quest/QuestWindow.css: -------------------------------------------------------------------------------- 1 | #QuestWindow { 2 | position: absolute; 3 | right: 50px; 4 | top: 250px; 5 | width: 230px; 6 | display: table; 7 | font-size: 0.75rem; 8 | } 9 | 10 | #QuestWindow .quest-window-ul { 11 | list-style: none; 12 | margin:5px; 13 | text-shadow: 1px 1px 1px black; 14 | } 15 | 16 | #QuestWindow .quest-window-ul .quest-window-li { 17 | list-style: none; 18 | margin-top:10px; 19 | } 20 | 21 | #QuestWindow .quest-window-ul .quest-window-li .quest-window-li-title { 22 | color: yellow; 23 | } 24 | 25 | #QuestWindow .quest-window-ul .quest-window-li .quest-window-li-summary { 26 | color: white; 27 | } 28 | 29 | #QuestWindow .quest-window-ul .quest-window-li .quest-window-li-monster { 30 | font-size: 0.65rem; 31 | color: white; 32 | } 33 | 34 | #QuestWindow .quest-window-ul .quest-window-li .quest-window-li-monster ul { 35 | list-style: none; 36 | padding-left: 20px; 37 | } -------------------------------------------------------------------------------- /src/UI/Components/MiniMap/MiniMapV2/MiniMapV2.css: -------------------------------------------------------------------------------- 1 | #MiniMapV2 { position:absolute; top:16px; right:16px; } 2 | #MiniMapV2 .info_container { display: flex; justify-content: space-between; } 3 | #MiniMapV2 .info_container .object { width:12px; height:12px; border:none; background:transparent; } 4 | #MiniMapV2 .info_container .plus { width:12px; height:12px; border:none; background:transparent; } 5 | #MiniMapV2 .info_container .minus { width:12px; height:12px; border:none; background:transparent; } 6 | #MiniMapV2 .info_container .mini { width:12px; height:12px; border:none; background:transparent; } 7 | #MiniMapV2 .info_container .viewon { width:12px; height:12px; border:none; background:transparent; } 8 | #MiniMapV2 .info_container .coordinates{ color: #fff; text-shadow: 1px 1px 1px #000; left: 14px; } 9 | 10 | #MiniMapV2 button.cashshopIcon { 11 | position: absolute; 12 | height: 43px; 13 | width: 43px; 14 | border: none; 15 | top: 0px; 16 | left: -45px; 17 | } -------------------------------------------------------------------------------- /src/App/GrfViewer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * App/GrfViewer.js 3 | * 4 | * Start GRF Viewer instance using ROBrowser 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | 11 | // Errors Handler (hack) 12 | require.onError = function (err) { 13 | 'use strict'; 14 | 15 | if (require.defined('UI/Components/Error/Error')) { 16 | require('UI/Components/Error/Error').addTrace(err); 17 | return; 18 | } 19 | 20 | require(['UI/Components/Error/Error'], function( Errors ){ 21 | Errors.addTrace(err); 22 | }); 23 | }; 24 | 25 | require({ 26 | baseUrl: '../../src/', 27 | paths: { 28 | text: 'Vendors/text.require', 29 | jquery: 'Vendors/jquery-1.9.1' 30 | } 31 | }, ['UI/Components/GrfViewer/GrfViewer', 'Core/Context'], function( GRFViewer, Context ) 32 | { 33 | 'use strict'; 34 | 35 | GRFViewer.append(); 36 | 37 | window.onbeforeunload = function() { 38 | return 'Are you sure to exit ?'; 39 | }; 40 | }); 41 | -------------------------------------------------------------------------------- /src/UI/Components/WinLogin/WinLogin/WinLogin.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
-------------------------------------------------------------------------------- /src/Engine/MapEngine/PCGoldTimer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Engine/MapEngine/PCGoldTimer.js 3 | * 4 | * Manage PCGoldTimer Mails 5 | * 6 | * @author Alisonrag 7 | */ 8 | 9 | define(function (require) { 10 | 'use strict'; 11 | 12 | /** 13 | * Load dependencies 14 | */ 15 | var Network = require('Network/NetworkManager'); 16 | var PACKET = require('Network/PacketStructure'); 17 | var PCGoldTimer = require('UI/Components/PCGoldTimer/PCGoldTimer'); 18 | 19 | /** 20 | * Send Packets 21 | */ 22 | 23 | // nothing yet 24 | 25 | /** 26 | * Receive Packets 27 | */ 28 | 29 | /** 30 | * Server sent request about PCGoldTimer Point 31 | * 32 | * @param {object} pkt - PACKET.ZC.GOLDPCCAFE_POINT 33 | */ 34 | function onPCGoldTimerPoint(pkt) { 35 | PCGoldTimer.setData(pkt); 36 | PCGoldTimer.append(); 37 | } 38 | 39 | /** 40 | * Initialize 41 | */ 42 | return function MainEngine() { 43 | Network.hookPacket(PACKET.ZC.GOLDPCCAFE_POINT, onPCGoldTimerPoint); 44 | }; 45 | 46 | }); 47 | -------------------------------------------------------------------------------- /src/UI/Components/ChangeCart/ChangeCart.css: -------------------------------------------------------------------------------- 1 | #changecart { position:absolute; width:400px; height:117px; font-size:12px; } 2 | #changecart .titlebar { width:100%; height:17px; background-color:white; background-repeat:repeat-x; border-radius:3px 3px 0px 0px; } 3 | #changecart .titlebar .base { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle; } 4 | #changecart .titlebar .text { text-shadow:1px 1px white; vertical-align:-2px; white-space:nowrap; 5 | /* chrome bug */ display: inline-block; width: 32px; height:13px; } 6 | #changecart .titlebar .left { margin-left:3px; float:left; } 7 | #changecart .titlebar .right { float:right; margin-right:3px;} 8 | #changecart .titlebar .clear { clear:both; } 9 | #changecart .titlebar .left { margin-left:3px; float:left; } 10 | #changecart .carts { border:0; width:400px; height:100px; background-color: white; overflow-y: auto; } 11 | #changecart .cart { display: inline-block; float: left; border:0; } 12 | -------------------------------------------------------------------------------- /src/UI/Components/ItemCompare/ItemCompare.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | Read 7 | Auto Read 8 |
9 |
10 |
11 |
12 |
13 |
14 | 15 |
16 |
17 | 18 |
19 |
20 |
21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /applications/tools/tests/models.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 37 | 38 | -------------------------------------------------------------------------------- /applications/tools/tests/grannymodels.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 37 | 38 | -------------------------------------------------------------------------------- /src/Utils/Base62.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Utils/Base62.js 3 | * 4 | * This is a plugin for ROBrowser to convert from and to Base62 format. 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Alisonrag 9 | */ 10 | 11 | define(function() 12 | { 13 | 'use strict'; 14 | 15 | var base62_alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 16 | 17 | // encode 18 | function encode(number) { 19 | var result = ''; 20 | while (number > 0) { 21 | result = base62_alphabet[number % 62] + result; 22 | number = Math.floor(number / 62); 23 | } 24 | return result; 25 | } 26 | 27 | // decode 28 | function decode(string) { 29 | var result = 0; 30 | for (var i = 0; i < string.length; i++) { 31 | result = result * 62 + base62_alphabet.indexOf(string[i]); 32 | } 33 | return result; 34 | } 35 | 36 | /** 37 | * Export 38 | */ 39 | return { 40 | encode: encode, 41 | decode: decode, 42 | base62_alphabet: base62_alphabet 43 | }; 44 | }); 45 | -------------------------------------------------------------------------------- /src/UI/Components/Error/Error.css: -------------------------------------------------------------------------------- 1 | body { background-color:#d2afab; } 2 | 3 | #error { 4 | color:white; 5 | font-size:14px; 6 | font-family:Arial, Helvetica, sans-serif; 7 | background-repeat: no-repeat; 8 | background-color: transparent; 9 | background-position: 0px 90px; 10 | padding-left:230px; 11 | width:500px; 12 | position:absolute; 13 | top:150px; 14 | left:50%; 15 | margin-left:-470px; 16 | } 17 | #error h1 { 18 | font-size:60px; 19 | line-height:40px; 20 | text-shadow: 0px 0px 10px rgba(0,0,0,0.3); 21 | } 22 | #error p { 23 | width:500px; 24 | text-shadow: 0px 0px 10px rgba(0,0,0,0.5); 25 | font-size:16px; 26 | line-height:24px; 27 | } 28 | #error h2 { 29 | color:#745b59; 30 | font-weight:normal; 31 | font-size:14px; 32 | margin-top:30px; 33 | margin-bottom:5px; 34 | } 35 | #error .trace { 36 | background-color:#a78582; 37 | border-radius:5px; 38 | font-family:"Times New Roman", Times, serif; 39 | line-height:18px; 40 | padding-left:10px; 41 | padding-top:5px; 42 | padding-bottom:2px; 43 | } -------------------------------------------------------------------------------- /src/UI/Components/WinLogin/WinLoginV2/WinLoginV2.html: -------------------------------------------------------------------------------- 1 |
2 | 13 |
14 | -------------------------------------------------------------------------------- /src/Engine/MapEngine/Achievement.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Engine/MapEngine/Achievement.js 3 | * 4 | * Manage Achievement packets and UI 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define(function( require ) 11 | { 12 | 'use strict'; 13 | 14 | 15 | /** 16 | * Load dependencies 17 | */ 18 | var Network = require('Network/NetworkManager'); 19 | var PACKET = require('Network/PacketStructure'); 20 | 21 | function onAllAchievementList(pkt){ 22 | 23 | } 24 | 25 | function onAchievementUpdate(pkt){ 26 | 27 | } 28 | 29 | function onRequestAchievementRewardACK(pkt){ 30 | 31 | } 32 | /** 33 | * Initialize 34 | */ 35 | return function MainEngine() 36 | { 37 | Network.hookPacket( PACKET.ZC.ALL_ACH_LIST, onAllAchievementList ); 38 | Network.hookPacket( PACKET.ZC.ACH_UPDATE, onAchievementUpdate ); 39 | Network.hookPacket( PACKET.ZC.REQ_ACH_REWARD_ACK, onRequestAchievementRewardACK ); 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /src/UI/Components/CharCreate/CharCreate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/CharCreate/CharCreate.js 3 | * 4 | * Character Creation 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | */ 9 | define(function (require) 10 | { 11 | 'use strict'; 12 | 13 | var publicName = 'CharCreate'; 14 | 15 | var CharCreate = require('./CharCreate/CharCreate'); 16 | var CharCreateV2 = require('./CharCreatev2/CharCreatev2'); 17 | var CharCreateV3 = require('./CharCreatev3/CharCreatev3'); 18 | var CharCreateV4 = require('./CharCreatev4/CharCreatev4'); 19 | 20 | var UIVersionManager = require('UI/UIVersionManager'); 21 | 22 | var versionInfo = { 23 | default: CharCreate, 24 | common: { 25 | 20180124: CharCreateV4, 26 | 20151001: CharCreateV3, 27 | 20120307: CharCreateV2 28 | }, 29 | re: { 30 | 31 | }, 32 | prere:{ 33 | 34 | } 35 | }; 36 | 37 | var Controller = UIVersionManager.getUIController(publicName, versionInfo); 38 | 39 | return Controller; 40 | }); -------------------------------------------------------------------------------- /src/DB/Items/EquipmentLocation.js: -------------------------------------------------------------------------------- 1 | /** 2 | * DB/Items/EquipmentLocation.js 3 | * 4 | * Location constant table 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | 11 | define(function() 12 | { 13 | "use strict"; 14 | 15 | 16 | return { 17 | HEAD_BOTTOM: 1 << 0, 18 | WEAPON: 1 << 1, 19 | GARMENT: 1 << 2, 20 | ACCESSORY1: 1 << 3, 21 | ARMOR: 1 << 4, 22 | SHIELD: 1 << 5, 23 | SHOES: 1 << 6, 24 | ACCESSORY2: 1 << 7, 25 | HEAD_TOP: 1 << 8, 26 | HEAD_MID: 1 << 9, 27 | COSTUME_HEAD_TOP: 1 << 10, 28 | COSTUME_HEAD_MID: 1 << 11, 29 | COSTUME_HEAD_BOTTOM: 1 << 12, 30 | COSTUME_ROBE: 1 << 13, 31 | COSTUME_FLOOR: 1 << 14, 32 | AMMO: 1 << 15, 33 | SHADOW_ARMOR: 1 << 16, 34 | SHADOW_WEAPON: 1 << 17, 35 | SHADOW_SHIELD: 1 << 18, 36 | SHADOW_SHOES: 1 << 19, 37 | SHADOW_R_ACCESSORY_SHADOW: 1 << 20, 38 | SHADOW_L_ACCESSORY_SHADOW: 1 << 21 39 | }; 40 | }); 41 | -------------------------------------------------------------------------------- /src/UI/Components/MakeItemSelection/ItemConvertSelection/MakeModelMessage/MakeModelMessage.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 | Message 7 |
8 |
9 |
10 |
11 |
12 | Consumption items are used in the synthesis. Are you sure? 13 |
14 |
15 | 16 | 17 | 18 |
19 |
20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/UI/Components/PlayerEquipment/PlayerEquipment.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/PlayerEquipment/PlayerEquipment.js 3 | * 4 | * Other player's Equipment window 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | */ 9 | define(function(require) 10 | { 11 | 'use strict'; 12 | 13 | 14 | /** 15 | * Dependencies 16 | */ 17 | var DB = require('DB/DBManager'); 18 | var Renderer = require('Renderer/Renderer'); 19 | var Camera = require('Renderer/Camera'); 20 | var SpriteRenderer = require('Renderer/SpriteRenderer'); 21 | var UIManager = require('UI/UIManager'); 22 | var UIComponent = require('UI/UIComponent'); 23 | var Equipment = require('UI/Components/Equipment/EquipmentV0/EquipmentV0'); 24 | var jQuery = require('Utils/jquery'); 25 | 26 | 27 | /** 28 | * Create Component 29 | */ 30 | var PlayerEquipment = Equipment.clone('PlayerEquipment'); 31 | 32 | /** 33 | * Create component and export it 34 | */ 35 | return UIManager.addComponent(PlayerEquipment); 36 | }); 37 | -------------------------------------------------------------------------------- /src/UI/Components/ItemInfo/ItemInfo.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | Read 7 | Auto Read 8 |
9 |
10 | 11 |
12 |
13 |
14 |
15 | 16 |
17 |
18 | 19 |
20 |
21 |
22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /src/UI/Components/MiniMap/MiniMapV2/MiniMapV2.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 | 0 7 | 0 8 |
9 | 10 | 11 | 12 | 13 |
14 |
-------------------------------------------------------------------------------- /src/UI/Components/GrfViewer/GrfViewer.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 9 | 10 | 11 |
12 | 13 | 14 |
15 |
16 |
Name
17 |
18 |
Open File
19 | Extract File 20 |
21 |
Properties
22 |
23 | 24 | 25 |
26 |
27 |
28 | 29 | 30 |
31 | 32 | 33 |
34 |

Drop GRF file on the area to start

35 |
36 | 37 | 38 |
39 |
40 |
41 | -------------------------------------------------------------------------------- /src/UI/Components/CharSelect/CharSelect.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/CharSelect/CharSelect.js 3 | * 4 | * Character Selection 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | */ 9 | define(function (require) 10 | { 11 | 'use strict'; 12 | 13 | var publicName = 'CharSelect'; 14 | 15 | var CharSelect = require('./CharSelect/CharSelect'); 16 | var CharSelectV2 = require('./CharSelectV2/CharSelectV2'); 17 | var CharSelectV3 = require('./CharSelectV3/CharSelectV3'); 18 | var CharSelectV4 = require('./CharSelectV4/CharSelectV4'); 19 | 20 | var UIVersionManager = require('UI/UIVersionManager'); 21 | 22 | var versionInfo = { 23 | default: CharSelect, 24 | common: { 25 | 20180124: CharSelectV4, 26 | 20141016: CharSelectV3, 27 | 20100803: CharSelectV2, 28 | 20100728: CharSelect, 29 | 20100720: CharSelectV2 30 | }, 31 | re: { 32 | 33 | }, 34 | prere:{ 35 | 36 | } 37 | }; 38 | 39 | var Controller = UIVersionManager.getUIController(publicName, versionInfo); 40 | 41 | return Controller; 42 | }); -------------------------------------------------------------------------------- /src/UI/Components/CheckAttendance/CheckAttendance.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
Check Reward
6 |
7 |
8 |
9 |
10 |
    11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 |
23 |
24 | Day 25 |
26 |
27 |
28 |
29 |
30 |
31 | 33 |
34 |
35 |
36 |
-------------------------------------------------------------------------------- /src/UI/Components/WinPopup/WinPopup.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/WinPopup/Winpopup.js 3 | * 4 | * Popup windows 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define(function(require) 11 | { 12 | 'use strict'; 13 | 14 | 15 | /** 16 | * Dependencies 17 | */ 18 | var Renderer = require('Renderer/Renderer'); 19 | var UIManager = require('UI/UIManager'); 20 | var UIComponent = require('UI/UIComponent'); 21 | var htmlText = require('text!./WinPopup.html'); 22 | var cssText = require('text!./WinPopup.css'); 23 | 24 | 25 | /** 26 | * Create Component 27 | */ 28 | var WinPopup = new UIComponent( 'WinPopup', htmlText, cssText ); 29 | 30 | 31 | /** 32 | * Initialize popup 33 | */ 34 | WinPopup.init = function init() 35 | { 36 | this.ui.css({ 37 | top: (Renderer.height-120) / 1.5 - 120, 38 | left: (Renderer.width -280) / 2.0, 39 | zIndex: 100 40 | }); 41 | }; 42 | 43 | 44 | /** 45 | * Create component based on view file and export it 46 | */ 47 | return UIManager.addComponent(WinPopup); 48 | }); 49 | -------------------------------------------------------------------------------- /src/UI/Components/SoundOption/SoundOption.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | Sound Settings 6 |
7 |
8 | 9 |
10 |
11 |
12 |
13 | 14 | 15 | 16 | 20 | 21 | 22 | 23 | 27 | 28 |
BGM 17 | 18 | on 19 |
Effect 24 | 25 | on 26 |
29 |
30 |
-------------------------------------------------------------------------------- /src/UI/Components/Trade/Trade.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Trade : 4 |
5 |
6 |
7 |
8 |
9 | 10 | 11 |
0
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
-------------------------------------------------------------------------------- /src/UI/Components/WorldMap/WorldMap.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | 7 | 8 |
9 |
10 | 12 | 14 |
15 |
16 | 17 |
18 |
19 |
20 |
21 |
22 |
23 | 25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
-------------------------------------------------------------------------------- /applications/tools/converter/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | File converter 6 | 7 | 8 | 9 | 10 |
11 |

DB Converter

12 |

Drag/drop files on the windows to convert them

13 |
14 | 19 |
20 | 25 |
26 | 27 |
28 | 29 |
30 | 31 |
32 | 33 |
34 |
35 | 36 | 37 | 38 |
39 |
40 | 41 | -------------------------------------------------------------------------------- /src/UI/Components/MakeItemSelection/ItemListWindowSelection.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | Storage 5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | 26 |
27 |
28 |
29 |
-------------------------------------------------------------------------------- /src/UI/Components/WinLogin/WinLoginV2/WinLoginV2Background.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/WinLoginV2/WinLoginV2Background.js 3 | * 4 | * WinLoginV2Background windows 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define(function(require) 11 | { 12 | 'use strict'; 13 | 14 | /** 15 | * Dependencies 16 | */ 17 | 18 | var UIManager = require('UI/UIManager'); 19 | var UIComponent = require('UI/UIComponent'); 20 | var htmlText = require('text!./WinLoginV2Background.html'); 21 | var cssText = require('text!./WinLoginV2Background.css'); 22 | 23 | /** 24 | * Create WinLogin namespace 25 | */ 26 | var WinLoginV2Background = new UIComponent( 'WinLoginV2Background', htmlText, cssText ); 27 | 28 | /** 29 | * Initialize win_login UI - Inherit from UIComponent 30 | */ 31 | WinLoginV2Background.init = function init() 32 | { 33 | }; 34 | 35 | /** 36 | * Once the component is on html - InHerit from UIComponent 37 | */ 38 | WinLoginV2Background.onAppend = function onAppend() 39 | { 40 | }; 41 | 42 | /** 43 | * Create component based on view file and export it 44 | */ 45 | return UIManager.addComponent(WinLoginV2Background); 46 | }); -------------------------------------------------------------------------------- /src/Utils/Queue.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Utils/Queue.js 3 | * 4 | * Queue System 5 | * 6 | * Helper to manage queue 7 | * 8 | * This file is part of ROBrowser, (http://www.robrowser.com/). 9 | * 10 | * @author Vincent Thibault 11 | */ 12 | 13 | define(function() 14 | { 15 | 'use strict'; 16 | 17 | 18 | /** 19 | * Queue Constructor 20 | * 21 | */ 22 | function Queue() 23 | { 24 | this.list = []; 25 | } 26 | 27 | 28 | /** 29 | * Add function to queue 30 | * 31 | * @param {function} callback 32 | */ 33 | Queue.prototype.add = function Add(callback) 34 | { 35 | this.list.push(callback); 36 | }; 37 | 38 | 39 | /** 40 | * Continue the queue 41 | */ 42 | Queue.prototype._next = function _Next() 43 | { 44 | if (this.list.length) { 45 | this.list.shift().call(this); 46 | } 47 | }; 48 | 49 | 50 | /** 51 | * To avoid problem with constructor, define it 52 | */ 53 | Object.defineProperty( Queue.prototype, 'next', { 54 | get : function(){ return this._next.bind(this); } 55 | }); 56 | 57 | 58 | /** 59 | * Start running queue 60 | */ 61 | Queue.prototype.run = function Run() 62 | { 63 | this.next(); 64 | }; 65 | 66 | 67 | /** 68 | * Export 69 | */ 70 | return Queue; 71 | }); 72 | -------------------------------------------------------------------------------- /src/UI/Components/Vending/VendingModelMessage/VendingModelMessage.css: -------------------------------------------------------------------------------- 1 | /* Message Model */ 2 | #VendingModelMessage { 3 | /* display: none; */ 4 | position:absolute; top:100px; left:100px; font-size:12px; width:270px; } 5 | 6 | #VendingModelMessage .titlebar { 7 | border-radius: 3px 3px 0px 0px; 8 | height: 15px; 9 | align-items: center; 10 | padding: 1px;} 11 | #VendingModelMessage .titlebar .base { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle; } 12 | #VendingModelMessage .container { 13 | background: white; 14 | width: 268px; 15 | height: 114px; 16 | border-radius: 0px 0px 3px 3px; 17 | border: 1px solid #ccc; 18 | display: grid; 19 | } 20 | 21 | #VendingModelMessage .text_message { 22 | height: 73px;padding: 11px; 23 | } 24 | 25 | 26 | /** Buttons **/ 27 | #VendingModelMessage .btns { position:absolute; bottom:-3px; width:100%; height:28px; } 28 | #VendingModelMessage .btn { position: absolute; border:0; width:42px; height:20px; background-repeat:no-repeat; background-color:transparent; } 29 | 30 | #VendingModelMessage .ok, #VendingModelMessage .make { right:6px; } 31 | #VendingModelMessage .delete { left:4px; } -------------------------------------------------------------------------------- /src/UI/Components/MakeItemSelection/ItemConvertSelection/ConvertItems.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | Storage 5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | 24 |
25 |
26 |
27 | 28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/Controls/MouseEventHandler.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Controls/MouseEventHandler.js 3 | * 4 | * Mouse Event Handler 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | 11 | define(['Utils/jquery'], function( jQuery ) 12 | { 13 | "use strict"; 14 | 15 | 16 | /** 17 | * Mouse object 18 | */ 19 | var Mouse = {}; 20 | 21 | 22 | /** 23 | * Mouse screen position (2D) 24 | */ 25 | Mouse.screen = { 26 | x: -1, 27 | y: -1, 28 | width: 0, 29 | height: 0 30 | }; 31 | 32 | 33 | /** 34 | * Mouse world position (3d) 35 | */ 36 | Mouse.world = { 37 | x: -1, 38 | y: -1, 39 | z: -1 40 | }; 41 | 42 | 43 | /** 44 | * @var {boolean} Do we intersect object ? 45 | */ 46 | Mouse.intersect = false; 47 | 48 | 49 | Mouse.MOUSE_STATE = { 50 | NORMAL: 0, 51 | DRAGGING: 1, 52 | USESKILL: 2, 53 | } 54 | 55 | /** 56 | * @var {integer} Mouse state 57 | */ 58 | Mouse.state = 0; 59 | 60 | 61 | /** 62 | * Track mouse move event 63 | */ 64 | jQuery(window).mousemove(function(event) 65 | { 66 | Mouse.screen.x = event.pageX; 67 | Mouse.screen.y = event.pageY; 68 | }); 69 | 70 | 71 | /** 72 | * Export 73 | */ 74 | return Mouse; 75 | }); 76 | -------------------------------------------------------------------------------- /src/UI/Components/ItemSelection/ItemSelection.css: -------------------------------------------------------------------------------- 1 | #ItemSelection { z-index:100; position:absolute; width:200px; } 2 | #ItemSelection .head { position:absolute; width:100%; height:22px; top:0px; left:0px;background-repeat:repeat-x; background-color:white; } 3 | #ItemSelection .head .text { position:relative; top:2px; left:5px; white-space:nowrap; } 4 | #ItemSelection .bottom { position:relative; height:120px; top:80px; left:0px; } 5 | 6 | #ItemSelection .content { position:absolute; top:22px; left:0px; background-color:white; width:100%; } 7 | #ItemSelection .list { background-color:#f7f7f7; height:130px; font-size:12px; overflow-y:auto; margin-left:10px; margin-right:10px; } 8 | #ItemSelection .list .item { display:block; height:28px; margin:4px 4px 4px 4px; position:relative; } 9 | #ItemSelection .list .item .icon { width:24px; height:24px; border:none; background-color:transparent; background-repeat:no-repeat; } 10 | #ItemSelection .list .item .name { font-size:12px; position:absolute; top:7px; left:30px; width:90px; white-space:nowrap;} 11 | 12 | #ItemSelection .btn { position:absolute; bottom:0px; border:0; width:42px; height:20px; bottom:4px; background-color:transparent; } 13 | #ItemSelection .ok { right: 50px; } 14 | #ItemSelection .cancel { right: 5px; } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Macros for LFS 2 | [attr]lfs filter=lfs diff=lfs merge=lfs -text 3 | [attr]lfslock lockable 4 | 5 | # Auto detect text files and perform LF normalization 6 | * text=auto 7 | 8 | # Source code 9 | *.bash text eol=lf 10 | *.bat text eol=crlf 11 | *.cmd text eol=crlf 12 | *.css text diff=css 13 | *.html text diff=html 14 | *.php text diff=php 15 | *.ps1 text eol=crlf 16 | *.scss text diff=css 17 | *.sh text eol=lf 18 | 19 | # Documentation 20 | *.md text diff=markdown 21 | 22 | # Configs 23 | *.lock text -diff 24 | package.json text eol=lf 25 | package-lock.json text eol=lf -diff 26 | 27 | # Graphics 28 | *.bmp binary 29 | *.gif binary 30 | *.png binary 31 | *.tga binary 32 | 33 | # Video 34 | *.bik binary 35 | 36 | # Audio 37 | *.mp3 binary 38 | *.wav binary 39 | 40 | # RO files 41 | *.act binary 42 | *.ebm binary 43 | *.ezv binary 44 | *.gat binary 45 | *.gnd binary 46 | *.gr2 binary 47 | *.grf binary 48 | *.gpf binary 49 | *.pal binary 50 | *.rgz binary 51 | *.rsm binary 52 | *.rsw binary 53 | *.spr binary 54 | *.str binary 55 | 56 | *.lub binary 57 | 58 | # intermediate and build files 59 | node_modules/* binary 60 | dist/* binary 61 | -------------------------------------------------------------------------------- /src/UI/Components/WinLogin/WinLogin/WinLogin.css: -------------------------------------------------------------------------------- 1 | #WinLogin { position:absolute; width:280px; height:120px; z-index:1; top: 60%; left: 50%; margin: 0 0 0 -140px; } 2 | #WinLogin input { position:absolute; left:91px; height:18px; width:127px; border:none; background-color:transparent; padding-left:2px; outline:none;} 3 | #WinLogin input.user { top:29px; } 4 | #WinLogin input.pass { top:61px; } 5 | #WinLogin .save { position:absolute; top:32px; right:10px; display:block; width:38px; height:10px; border:none; background-color:transparent; background-repeat:no-repeat; } 6 | #WinLogin .btn { position:absolute; border:0; width:42px; height:20px; bottom:4px; background-color:transparent; } 7 | #WinLogin .btn.connect { right:50px; } 8 | #WinLogin .btn.signup { left:5px; } 9 | #WinLogin .btn.exit { right:5px; } 10 | 11 | 12 | /* Override browser autofill styles */ 13 | #WinLogin input:-webkit-autofill, 14 | #WinLogin input:-webkit-autofill:hover, 15 | #WinLogin input:-webkit-autofill:focus, 16 | #WinLogin input:-webkit-autofill:active, 17 | #WinLogin input:-internal-autofill-selected, 18 | #WinLogin input:-internal-autofill-previewed { 19 | -webkit-background-clip: text; 20 | transition: background-color 5000sease-in-out 0s; 21 | box-shadow: inset 0 0 20px 20px #ffffff00; 22 | } 23 | -------------------------------------------------------------------------------- /src/UI/Components/MakeItemSelection/ItemConvertSelection/MakeModelMessage/MakeModelMessage.css: -------------------------------------------------------------------------------- 1 | /* Message Model */ 2 | #MakeModelMessage { 3 | /* display: none; */ 4 | position:absolute; top:100px; left:100px; font-size:12px; width:270px; } 5 | 6 | #MakeModelMessage .titlebar { 7 | border-radius: 3px 3px 0px 0px; 8 | height: 15px; 9 | align-items: center; 10 | padding: 1px;} 11 | #MakeModelMessage .titlebar .base { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle; } 12 | #MakeModelMessage .container { 13 | background: white; 14 | width: 268px; 15 | height: 114px; 16 | border-radius: 0px 0px 3px 3px; 17 | border: 1px solid #ccc; 18 | display: grid; 19 | } 20 | 21 | #MakeModelMessage .text_message { 22 | height: 73px;padding: 11px; 23 | } 24 | 25 | 26 | /** Buttons **/ 27 | #MakeModelMessage .btns { position:absolute; bottom:-3px; width:100%; height:28px; } 28 | #MakeModelMessage .btn { position: absolute; border:0; width:42px; height:20px; background-repeat:no-repeat; background-color:transparent; } 29 | 30 | #MakeModelMessage .ok, #MakeModelMessage .make { right:50px; } 31 | #MakeModelMessage .cancel { right:4px; } 32 | #MakeModelMessage .delete { left:4px; } -------------------------------------------------------------------------------- /src/UI/Components/Quest/Quest/Quest.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | Quest Information 5 |
6 |
7 |
    8 |
  • 9 |
  • 10 |
  • 11 |
  • 12 |
13 |
14 |
15 |
    16 |
17 |
    18 |
19 |
    20 |
21 |
    22 |
23 |
24 |
25 |
26 | 28 |
29 |
30 | Show Quest 31 |
32 |
33 | 34 |
35 |
36 |
37 |
-------------------------------------------------------------------------------- /src/UI/Components/NpcMenu/NpcMenu.css: -------------------------------------------------------------------------------- 1 | #NpcMenu { 2 | position:absolute; 3 | border-radius:5px; 4 | width:276px; 5 | height:116px; 6 | background-color:white; 7 | padding:2px; 8 | left:100px; 9 | top:285px; 10 | } 11 | 12 | #NpcMenu .title { 13 | white-space: nowrap; 14 | overflow: hidden; 15 | display: block; 16 | width: 260px; 17 | padding-left: 3px; 18 | padding-top: 3px; 19 | } 20 | 21 | #NpcMenu .container { 22 | border-radius:5px; 23 | border:1px solid #c1c6c2; 24 | width:269px; 25 | height:109px; 26 | padding-left:5px; 27 | padding-top:5px; 28 | } 29 | 30 | #NpcMenu .content { 31 | white-space:pre-wrap; 32 | background-color:#f9f9f9; 33 | width:260px; 34 | height:80px; 35 | overflow-x:hidden; 36 | overflow-y:auto; 37 | padding-left:3px; 38 | margin-top:5px; 39 | } 40 | 41 | #NpcMenu .content div { 42 | width:255px; 43 | height:17px; 44 | display:block; 45 | padding-top:3px; 46 | padding-left:5px; 47 | } 48 | 49 | #NpcMenu .content div.selected { 50 | background-color:#cde0ff; 51 | } 52 | 53 | #NpcMenu .btn { 54 | background-color:transparent; 55 | position: absolute; 56 | border: 0; 57 | width: 42px; 58 | height: 20px; 59 | bottom: 5px; 60 | } 61 | 62 | #NpcMenu .cancel { 63 | right:4px; 64 | } 65 | 66 | #NpcMenu .ok { 67 | right: 50px; 68 | } -------------------------------------------------------------------------------- /src/UI/Components/MakeArrowSelection/MakeArrowSelection.css: -------------------------------------------------------------------------------- 1 | #MakeArrowSelection { z-index:100; position:absolute; width:200px; } 2 | #MakeArrowSelection .head { position:absolute; width:100%; height:22px; top:0px; left:0px;background-repeat:repeat-x; background-color:white; } 3 | #MakeArrowSelection .head .text { position:relative; top:2px; left:5px; white-space:nowrap; } 4 | #MakeArrowSelection .bottom { position:relative; height:120px; top:80px; left:0px; } 5 | 6 | #MakeArrowSelection .content { position:absolute; top:22px; left:0px; background-color:white; width:100%; } 7 | #MakeArrowSelection .list { background-color:#f7f7f7; height:130px; font-size:12px; overflow-y:auto; margin-left:10px; margin-right:10px; } 8 | #MakeArrowSelection .list .item { display:block; height:28px; margin:4px 4px 4px 4px; position:relative; } 9 | #MakeArrowSelection .list .item .icon { width:24px; height:24px; border:none; background-color:transparent; background-repeat:no-repeat; } 10 | #MakeArrowSelection .list .item .name { font-size:12px; position:absolute; top:7px; left:30px; width:90px; white-space:nowrap;} 11 | 12 | #MakeArrowSelection .btn { position:absolute; bottom:0px; border:0; width:42px; height:20px; bottom:4px; background-color:transparent; } 13 | #MakeArrowSelection .ok { right: 50px; } 14 | #MakeArrowSelection .cancel { right: 5px; } -------------------------------------------------------------------------------- /src/UI/Components/Escape/Escape.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
Select Option
6 |
7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
-------------------------------------------------------------------------------- /src/UI/Components/Quest/Quest.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/Quest/Quest.js 3 | * 4 | * Quest Window 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | */ 9 | define(function (require) 10 | { 11 | 'use strict'; 12 | 13 | var publicName = 'Quest'; 14 | 15 | var Quest = require('./Quest/Quest'); 16 | var QuestV1 = require('./QuestV1/QuestV1'); 17 | 18 | var UIVersionManager = require('UI/UIVersionManager'); 19 | var KEYS = require('Controls/KeyEventHandler'); 20 | 21 | var versionInfo = { 22 | default: QuestV1, 23 | common: { 24 | 20180307: Quest 25 | }, 26 | re: { 27 | 28 | }, 29 | prere:{ 30 | 31 | } 32 | }; 33 | 34 | var Controller = UIVersionManager.getUIController(publicName, versionInfo); 35 | var _selectUIVersion = Controller.selectUIVersion; 36 | 37 | // Extend default UI selector 38 | Controller.selectUIVersion = function () { 39 | _selectUIVersion(); 40 | 41 | var component = Controller.getUI(); 42 | 43 | // Escape to close the UI 44 | component.onKeyDown = function onKeyDown(e) { 45 | if ((e.which === KEYS.ESCAPE || e.key === "Escape") && component.ui.is(':visible')) { 46 | if (typeof component.toggle === 'function') component.toggle(); 47 | } 48 | } 49 | }; 50 | 51 | return Controller; 52 | }); 53 | -------------------------------------------------------------------------------- /src/UI/Components/Emoticons/Emoticons.css: -------------------------------------------------------------------------------- 1 | #Emoticons { width: 250px; height:330px; position:absolute; } 2 | 3 | #Emoticons .titlebar { width:100%; height:17px; background-color:white; background-repeat:repeat-x; border-radius:3px 3px 0px 0px; } 4 | #Emoticons .titlebar .base { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle; } 5 | #Emoticons .titlebar .text { text-shadow:1px 1px white; vertical-align:-2px; white-space:nowrap; 6 | /* chrome bug */ display: inline-block; width: 32px; height:13px; } 7 | 8 | #Emoticons .titlebar .left { margin-left:3px; float:left; } 9 | #Emoticons .titlebar .right { float:right; margin-right:3px;} 10 | #Emoticons .titlebar .clear { clear:both; } 11 | 12 | #Emoticons .content { height:290px; background-color:white; padding-left:10px; } 13 | #Emoticons .content canvas { width:40px; height:40px; display:inline-block; border-radius:5px; border:1px solid transparent; margin:2px; } 14 | #Emoticons .content canvas:hover { border:1px solid #cfcfcf; } 15 | 16 | #Emoticons .navigation { text-align:center; background-color:white; border-radius:0px 0px 3px 3px; } 17 | #Emoticons .navigation button { border:none; background:none; color:#e6b59c; } 18 | #Emoticons .navigation button:hover { color:#ff9c9c;} 19 | #Emoticons .navigation button.disabled { visibility:hidden; } -------------------------------------------------------------------------------- /src/UI/Components/ShortCut/ShortCut.css: -------------------------------------------------------------------------------- 1 | #ShortCut { position:absolute; overflow:hidden; width:280px; background-repeat:repeat-y;} 2 | #ShortCut .close { position:absolute; top:2px; right:2px; border:none; background-color:transparent; width:11px; height:11px; } 3 | #ShortCut .resize { position:absolute; bottom:1px; right:1px; border:none; background-color:transparent; width:13px; height:13px; } 4 | 5 | #ShortCut .row { position:relative; } 6 | #ShortCut .row .container { float:left; width:24px; height:23px; margin-top:5px; margin-left:5px; margin-bottom:6px; } 7 | #ShortCut .row .container:hover { background-color:#b5ffb5;} 8 | #ShortCut .row .index { float:left; position:relative; top:13px; left:5px; } 9 | #ShortCut .row .clear {} 10 | 11 | #ShortCut .icon { position:relative; } 12 | #ShortCut .icon .img { width:24px; height:24px; background-repeat:no-repeat; border:none; background-color:transparent;} 13 | #ShortCut .icon .name { display:none; z-index:1; position:absolute; top:0px; left:0px; background-color:rgba(0,0,0,0.6); text-shadow:1px 1px black; color:white; padding:5px; white-space:nowrap; } 14 | #ShortCut .icon:hover .name { display:block; } 15 | #ShortCut .icon.hide .name { display:none; } 16 | #ShortCut .icon .amount { font-size:10px; position:absolute; right:1px; top:20px; text-shadow:1px 1px 0px white; text-align:right; font-weight:bold; } 17 | -------------------------------------------------------------------------------- /src/UI/Components/RefineWeaponSelection/RefineWeaponSelection.css: -------------------------------------------------------------------------------- 1 | #RefineWeaponSelection { z-index:100; position:absolute; width:200px; } 2 | #RefineWeaponSelection .head { position:absolute; width:100%; height:22px; top:0px; left:0px;background-repeat:repeat-x; background-color:white; } 3 | #RefineWeaponSelection .head .text { position:relative; top:2px; left:5px; white-space:nowrap; } 4 | #RefineWeaponSelection .bottom { position:relative; height:120px; top:80px; left:0px; } 5 | 6 | #RefineWeaponSelection .content { position:absolute; top:22px; left:0px; background-color:white; width:100%; } 7 | #RefineWeaponSelection .list { background-color:#f7f7f7; height:130px; font-size:12px; overflow-y:auto; margin-left:10px; margin-right:10px; } 8 | #RefineWeaponSelection .list .item { display:block; height:28px; margin:4px 4px 4px 4px; position:relative; } 9 | #RefineWeaponSelection .list .item .icon { width:24px; height:24px; border:none; background-color:transparent; background-repeat:no-repeat; } 10 | #RefineWeaponSelection .list .item .name { font-size:12px; position:absolute; top:7px; left:30px; width:90px; white-space:nowrap;} 11 | 12 | #RefineWeaponSelection .btn { position:absolute; bottom:0px; border:0; width:42px; height:20px; bottom:4px; background-color:transparent; } 13 | #RefineWeaponSelection .ok { right: 50px; } 14 | #RefineWeaponSelection .cancel { right: 5px; } -------------------------------------------------------------------------------- /src/Renderer/Map/Sounds.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Renderer/Map/Sounds.js 3 | * 4 | * Play 3D sounds 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define( ['Utils/gl-matrix', 'Audio/SoundManager'], 11 | function( glMatrix, SoundManager ) 12 | { 13 | 'use strict'; 14 | 15 | 16 | /** 17 | * Sound renderer namespace 18 | */ 19 | var vec2 = glMatrix.vec2; 20 | var _list = []; 21 | 22 | 23 | /** 24 | * Add 3D sound to the list 25 | */ 26 | function add( sound ) 27 | { 28 | _list.push( sound ); 29 | } 30 | 31 | 32 | /** 33 | * Remove data from memory 34 | */ 35 | function free() 36 | { 37 | _list.length = 0; 38 | } 39 | 40 | 41 | /** 42 | * Rendering sounds 43 | * 44 | * @param {vec2} position 45 | */ 46 | function render( position, tick ) 47 | { 48 | var sound; 49 | var i, count = _list.length; 50 | 51 | for (i = 0; i < count; ++i) { 52 | sound = _list[i]; 53 | var dist = Math.floor(vec2.dist(sound.pos, position)); 54 | if (sound.tick < tick && dist <= sound.range) { 55 | SoundManager.playPosition( sound.file, sound.pos); 56 | sound.tick = tick + sound.cycle * 1000; 57 | } 58 | } 59 | } 60 | 61 | 62 | /** 63 | * Export 64 | */ 65 | return { 66 | add: add, 67 | free: free, 68 | render: render 69 | }; 70 | }); 71 | -------------------------------------------------------------------------------- /src/UI/Components/Quest/QuestV1/QuestHelperV1.css: -------------------------------------------------------------------------------- 1 | #QuestInfoV1 { position: absolute; width: 350px; height: 375px; } 2 | 3 | #QuestInfoV1 .titlebar { width: 350px; height: 375px; } 4 | 5 | #QuestInfoV1 .titlebar .content { position: relative; width: 100%; height: 100%; } 6 | 7 | #QuestInfoV1 .titlebar .content .quest-info-close-btn { position:absolute; top:3px; right:2px; width:11px; height:11px; border:none; background:none; } 8 | #QuestInfoV1 .titlebar .content .title { position:absolute; top:60px; left:120px; } 9 | #QuestInfoV1 .titlebar .content .summary { position:absolute; top:135px; left:25px; } 10 | #QuestInfoV1 .titlebar .content .objective { position:absolute; top:283px; left:25px; max-width: 300px;} 11 | #QuestInfoV1 .titlebar .content .monster { position:absolute; top:341px; left:50px; } 12 | #QuestInfoV1 .titlebar .content .monster .monster-select { border:none; min-width: 110px; } 13 | #QuestInfoV1 .titlebar .content .killed { position:absolute; top:343px; left:215px; } 14 | #QuestInfoV1 .titlebar .content .limited { position:absolute; top:343px; left:290px; } 15 | 16 | .item-link { 17 | color: #0070C0; 18 | cursor: pointer; 19 | } 20 | 21 | .item-link:hover { 22 | color: #00A0FF; 23 | } 24 | 25 | .navi-link { 26 | color: #C00000; 27 | cursor: pointer; 28 | text-decoration: underline; 29 | } 30 | 31 | .navi-link:hover { 32 | color: #FF0000; 33 | } 34 | -------------------------------------------------------------------------------- /src/UI/Components/Rodex/RodexIcon.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/Rodex/RodexIcon.js 3 | * 4 | * Rodex Icon 5 | * 6 | * @author Alisonrag 7 | * 8 | */ 9 | define(function(require) 10 | { 11 | 'use strict'; 12 | 13 | 14 | /** 15 | * Dependencies 16 | */ 17 | var UIManager = require('UI/UIManager'); 18 | var UIComponent = require('UI/UIComponent'); 19 | var htmlText = require('text!./RodexIcon.html'); 20 | var cssText = require('text!./RodexIcon.css'); 21 | var Rodex = require('UI/Components/Rodex/Rodex'); 22 | 23 | /** 24 | * Create Component 25 | */ 26 | var RodexIcon = new UIComponent( 'RodexIcon', htmlText, cssText ); 27 | 28 | /** 29 | * Apply preferences once append to body 30 | */ 31 | RodexIcon.onAppend = function OnAppend() 32 | { 33 | let icon = this.ui.find('.rodex-icon'); 34 | icon.on('click', onClickRodexIcon); 35 | icon.focus(); 36 | }; 37 | 38 | RodexIcon.toggle = function toggle() 39 | { 40 | this.ui.toggle(); 41 | if (this.ui.is(':visible')) { 42 | this.focus(); 43 | } 44 | }; 45 | 46 | function onClickRodexIcon() { 47 | Rodex.openRodexBox(); 48 | Rodex.append(); 49 | Rodex.ui.show(); 50 | Rodex.ui.focus(); 51 | } 52 | 53 | /** 54 | * Create component and export it 55 | */ 56 | return UIManager.addComponent(RodexIcon); 57 | }); 58 | 59 | -------------------------------------------------------------------------------- /src/UI/Components/SkillList/SkillList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/SkillList/SkillList.js 3 | * 4 | * SkillWindow 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | */ 9 | define(function (require) 10 | { 11 | 'use strict'; 12 | 13 | var publicName = 'SkillList'; 14 | 15 | var SkillList = require('./SkillList/SkillList'); 16 | var SkillListV0 = require('./SkillListV0/SkillListV0'); 17 | 18 | var UIVersionManager = require('UI/UIVersionManager'); 19 | var KEYS = require('Controls/KeyEventHandler'); 20 | 21 | var versionInfo = { 22 | default: SkillListV0, 23 | common: { 24 | 20090601: SkillList 25 | }, 26 | re: { 27 | 28 | }, 29 | prere:{ 30 | 31 | } 32 | }; 33 | 34 | var Controller = UIVersionManager.getUIController(publicName, versionInfo); 35 | var _selectUIVersion = Controller.selectUIVersion; 36 | 37 | // Extend default UI selector 38 | Controller.selectUIVersion = function () { 39 | _selectUIVersion(); 40 | 41 | var component = Controller.getUI(); 42 | 43 | // Escape to close the UI 44 | component.onKeyDown = function onKeyDown(e) { 45 | if ((e.which === KEYS.ESCAPE || e.key === "Escape") && component.ui.is(':visible')) { 46 | if (typeof component.toggle === 'function') component.toggle(); 47 | } 48 | } 49 | }; 50 | 51 | return Controller; 52 | }); 53 | -------------------------------------------------------------------------------- /src/UI/Components/WinLogin/WinLoginV2/WinLoginV2Background.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
-------------------------------------------------------------------------------- /src/Engine/MapEngine/CashShop.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Engine/MapEngine/CashShop.js 3 | * 4 | * Manage Trade packets and UI 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define(function( require ) 11 | { 12 | 'use strict'; 13 | 14 | /** 15 | * Load dependencies 16 | */ 17 | var Network = require('Network/NetworkManager'); 18 | var PACKET = require('Network/PacketStructure'); 19 | var CashShop = require('UI/Components/CashShop/CashShop'); 20 | 21 | function onOpenCashShop(pkt){ 22 | CashShop.readPoints(pkt.cashPoints, pkt.kafraPoints, pkt.tab); 23 | } 24 | 25 | function onOpenReqCashShopItemList(pkt){ 26 | CashShop.readCashShopItems(pkt); 27 | } 28 | 29 | function onSuccessCashShopBuyList(pkt){ 30 | CashShop.setSuccessCashShopUpdate(pkt); 31 | } 32 | 33 | /** 34 | * Initialize 35 | */ 36 | return function MainEngine() 37 | { 38 | Network.hookPacket( PACKET.ZC.SE_CASHSHOP_OPEN, onOpenCashShop ); 39 | Network.hookPacket( PACKET.ZC.SE_CASHSHOP_OPEN2, onOpenCashShop ); 40 | Network.hookPacket( PACKET.ZC.SE_CASHSHOP_OPEN3, onOpenCashShop ); // old with no tab 41 | Network.hookPacket( PACKET.ZC.ACK_SCHEDULER_CASHITEM, onOpenReqCashShopItemList ); 42 | Network.hookPacket( PACKET.ZC.SE_PC_BUY_CASHITEM_RESULT, onSuccessCashShopBuyList ); 43 | }; 44 | }); 45 | -------------------------------------------------------------------------------- /src/UI/Components/BasicInfo/BasicInfo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * UI/Components/BasicInfo/BasicInfo.js 3 | * 4 | * Chararacter Basic information windows 5 | * 6 | * Note: For different versions, please use different Object names and main div IDs to avoid conflicts in settings and styles 7 | * 8 | * This file is part of ROBrowser, (http://www.robrowser.com/). 9 | * 10 | */ 11 | define(function (require) 12 | { 13 | 'use strict'; 14 | 15 | var publicName = 'BasicInfo'; 16 | 17 | var BasicInfo = require('./BasicInfo/BasicInfo'); 18 | var BasicInfoV0 = require('./BasicInfoV0/BasicInfoV0'); 19 | var BasicInfoV3 = require('./BasicInfoV3/BasicInfoV3'); 20 | var BasicInfoV4 = require('./BasicInfoV4/BasicInfoV4'); 21 | var BasicInfoV5 = require('./BasicInfoV5/BasicInfoV5'); 22 | 23 | var UIVersionManager = require('UI/UIVersionManager'); 24 | 25 | var versionInfo = { 26 | default: BasicInfoV0, 27 | common: { 28 | 20200520: BasicInfoV5, // not sure the exact client date that started supporting 4th Jobs 29 | 20180124: BasicInfoV4, 30 | 20160101: BasicInfoV3, 31 | 20090601: BasicInfo, 32 | }, 33 | re: { 34 | 35 | }, 36 | prere:{ 37 | 38 | }, 39 | job: { 40 | Fourth_Class: BasicInfoV5, 41 | default: BasicInfoV4 42 | } 43 | }; 44 | 45 | var BasicInfoController = UIVersionManager.getUIController(publicName, versionInfo); 46 | 47 | return BasicInfoController; 48 | }); 49 | -------------------------------------------------------------------------------- /src/Renderer/Entity/EntityAnimations.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Renderer/EntityAnimations.js 3 | * 4 | * Manage entity special animations 5 | * 6 | * This file is part of ROBrowser, (http://www.robrowser.com/). 7 | * 8 | * @author Vincent Thibault 9 | */ 10 | define(['Renderer/Renderer'], function( Renderer ) 11 | { 12 | 'use strict'; 13 | 14 | 15 | /** 16 | * @Constructor 17 | * @param {object} Entity 18 | */ 19 | function Animations(entity) 20 | { 21 | this.entity = entity; 22 | this.list = []; 23 | } 24 | 25 | 26 | /** 27 | * Add an animation to the list 28 | * 29 | * @param {function} callback 30 | */ 31 | Animations.prototype.add = function add(callback) 32 | { 33 | this.list.push({ 34 | tick: Renderer.tick, 35 | callback: callback 36 | }); 37 | }; 38 | 39 | 40 | /** 41 | * Process events 42 | */ 43 | Animations.prototype.process = function process() 44 | { 45 | var i, count; 46 | 47 | for (i = 0, count = this.list.length; i < count; ++i) { 48 | if (this.list[i].callback(Renderer.tick - this.list[i].tick)) { 49 | this.list.splice(i, 1); 50 | i--; 51 | count--; 52 | } 53 | } 54 | }; 55 | 56 | 57 | /** 58 | * Clean up events 59 | */ 60 | Animations.prototype.free = function free() 61 | { 62 | this.list.length = 0; 63 | }; 64 | 65 | 66 | return function init() { 67 | this.animations = new Animations(this); 68 | }; 69 | }); 70 | -------------------------------------------------------------------------------- /src/UI/Components/CartItems/CartItems.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | CartItems 6 |
7 |
8 | 9 | 10 |
11 |
12 |
13 |
14 |
15 | 16 | 17 | 23 | 24 | 25 | 29 | 30 |
18 |
19 |
20 |
21 |
22 |
31 |
32 |
33 | -------------------------------------------------------------------------------- /src/UI/Components/WinStats/WinStats/WinStats.css: -------------------------------------------------------------------------------- 1 | #WinStats { position:absolute; width:280px; height:130px; background-color:transparent; background-repeat:no-repeat; font-size:11px; } 2 | 3 | #WinStats .titlebar { width:280px; height:17px; background-color:white; background-repeat:repeat-x; border-radius:3px 3px 0px 0px; } 4 | #WinStats .titlebar .base { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle;} 5 | #WinStats .titlebar .text { text-shadow:1px 1px white; vertical-align:-2px; white-space:nowrap; 6 | /* chrome bug */ display: inline-block; width: 32px; height:13px; } 7 | 8 | #WinStats .titlebar .left { margin-left:3px; float:left; } 9 | #WinStats .titlebar .right { float:right; margin-right:3px;} 10 | #WinStats .titlebar .clear { clear:both; } 11 | 12 | #WinStats .panel { height: 103px } 13 | #WinStats .group { position:absolute; top:23px; } 14 | #WinStats .group div { height:16px; display:block;} 15 | #WinStats .stats { left:53px; } 16 | #WinStats .bonus { left:70px; } 17 | #WinStats .requirements { left:96px; text-align:right; width:12px; } 18 | #WinStats .column1 { top:23px; right:87px; text-align:right; } 19 | #WinStats .column2 { top:23px; right:5px; text-align:right; } 20 | #WinStats .up { left:89px; top:18px; } 21 | #WinStats .up button { display:block; margin-top:5px; border:none; width:11px; height:11px; background-color:transparent; background-repeat:no-repeat; } 22 | -------------------------------------------------------------------------------- /src/UI/Components/WinStats/WinStatsV2/WinStatsV2.css: -------------------------------------------------------------------------------- 1 | #WinStatsV2 { position:absolute; width:280px; height:130px; background-color:transparent; background-repeat:no-repeat; font-size:11px; } 2 | 3 | #WinStatsV2 .titlebar { width:280px; height:17px; background-color:white; background-repeat:repeat-x; border-radius:3px 3px 0px 0px; } 4 | #WinStatsV2 .titlebar .base { width:11px; height:11px; border:none; background-color:transparent; background-repeat:no-repeat; vertical-align:middle;} 5 | #WinStatsV2 .titlebar .text { text-shadow:1px 1px white; vertical-align:-2px; white-space:nowrap; 6 | /* chrome bug */ display: inline-block; width: 32px; height:13px; } 7 | 8 | #WinStatsV2 .titlebar .left { margin-left:3px; float:left; } 9 | #WinStatsV2 .titlebar .right { float:right; margin-right:3px;} 10 | #WinStatsV2 .titlebar .clear { clear:both; } 11 | 12 | #WinStatsV2 .panel { height: 103px } 13 | #WinStatsV2 .group { position:absolute; top:23px; } 14 | #WinStatsV2 .group div { height:16px; display:block;} 15 | #WinStatsV2 .stats { left:37px; } 16 | #WinStatsV2 .bonus { left:56px; } 17 | #WinStatsV2 .requirements { left:90px; text-align:right; width:12px; } 18 | #WinStatsV2 .column1 { top:23px; right:88px; text-align:right; } 19 | #WinStatsV2 .column2 { top:23px; right:5px; text-align:right; } 20 | #WinStatsV2 .up { left:78px; top:19px; } 21 | #WinStatsV2 .up button { display:block; margin-top:5px; border:none; width:11px; height:11px; background-color:transparent; background-repeat:no-repeat; } 22 | -------------------------------------------------------------------------------- /applications/tools/converter/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color:white; 3 | border: 5px dashed transparent; 4 | padding: 5%; 5 | } 6 | 7 | body.drag { 8 | border: 5px dashed grey; 9 | border-radius: 30px; 10 | } 11 | 12 | h2 { 13 | margin-bottom: 60px; 14 | } 15 | 16 | .container { 17 | text-align:center; 18 | font-family:Arial; 19 | font-size:14px; 20 | font-weight:bold; 21 | } 22 | 23 | select { 24 | width: 100%; 25 | height: 30px; 26 | font-size: 18px; 27 | max-width: 400px; 28 | } 29 | 30 | .from { 31 | margin-bottom: 30px; 32 | } 33 | 34 | .to { 35 | margin-bottom: 10px; 36 | } 37 | 38 | .group { 39 | color:#999; 40 | display: inline-block; 41 | margin:2%; 42 | text-align:center; 43 | width:200px; 44 | } 45 | 46 | .box { 47 | width: 100px; 48 | height: 100px; 49 | border-radius: 30px; 50 | border: 2px dashed #ccc; 51 | display: inline-block; 52 | margin-bottom:10px; 53 | background-image:url('arrow-up.png'); 54 | background-repeat:no-repeat; 55 | background-position:center center; 56 | } 57 | 58 | .removing { 59 | opacity:0; 60 | } 61 | 62 | .group.removing .box { 63 | background-image:url('loading.gif'); 64 | transform:rotate(360deg); 65 | -webkit-transform:rotate(360deg); 66 | } 67 | 68 | .group.removed { 69 | opacity:0; 70 | width:0px; 71 | height:0px; 72 | margin:0; 73 | } 74 | 75 | * { 76 | transition:all 0.5s ease-out; 77 | } 78 | 79 | button { 80 | margin-top: 20px; 81 | width: 200px; 82 | height: 40px; 83 | font-size:18px; 84 | } -------------------------------------------------------------------------------- /src/UI/Components/Storage/Storage.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | Storage 5 |
6 |
7 |
8 |
9 |
10 | 11 | 12 | 21 | 24 | 25 | 26 | 31 | 32 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 22 |
23 |
33 |
34 |
-------------------------------------------------------------------------------- /src/UI/Components/EntitySignboard/EntitySignboard.css: -------------------------------------------------------------------------------- 1 | .EntitySignboard { 2 | position: absolute; 3 | z-index: 45; 4 | width: 161px; 5 | background-repeat: no-repeat; 6 | padding: 3px; 7 | letter-spacing: 0px; 8 | height: 30px; 9 | cursor: inherit; 10 | } 11 | 12 | .EntitySignboard button { 13 | position: relative; 14 | height: 24px; 15 | width: 100%; 16 | text-align: left; 17 | padding: 0px; 18 | background-color: transparent; 19 | background-repeat: no-repeat; 20 | white-space: nowrap; 21 | border: none; 22 | left: 2px; 23 | top: 2px; 24 | } 25 | 26 | .EntitySignboard button:hover { 27 | cursor: inherit; 28 | } 29 | 30 | .EntitySignboard button.icon-only { 31 | pointer-events: none; 32 | } 33 | 34 | .EntitySignboard button .title { 35 | position: relative; 36 | left: 30px; 37 | width: 122px; 38 | color: white; 39 | overflow: hidden; 40 | color: white; 41 | text-overflow: ellipsis; 42 | overflow: hidden; 43 | white-space: nowrap; 44 | display: inline-block; 45 | max-width: 100%; 46 | vertical-align: middle; 47 | font-size: 0.9em; 48 | } 49 | 50 | .EntitySignboard .overlay { 51 | position: absolute; 52 | top: 0px; 53 | left: 26px; 54 | display: none; 55 | white-space: nowrap; 56 | z-index:900; 57 | height:13px; 58 | padding:5px; 59 | background-color:rgba(0,0,0,0.6); 60 | color:white; 61 | text-shadow:1px 1px black; 62 | } 63 | 64 | .EntitySignboard button:hover .overlay { 65 | display:block; 66 | } -------------------------------------------------------------------------------- /src/UI/Components/MapName/MapName.css: -------------------------------------------------------------------------------- 1 | #MapName { 2 | position:absolute; 3 | top: 90px; 4 | height:190px; 5 | left: 50%; 6 | width:500px; 7 | margin-left: -250px; 8 | } 9 | 10 | #MapName .container .mapbg { 11 | height: 190px; 12 | width: 500px; 13 | position: relative; 14 | background-size: contain; 15 | } 16 | 17 | #MapName .mapsubtitle { 18 | height: 30px; 19 | width: 500px; 20 | position: relative; 21 | color: white; 22 | font-weight: bolder; 23 | text-align: center; 24 | top: 70px; 25 | font-size: 16px; 26 | } 27 | 28 | #MapName .maptitle { 29 | height: 80px; 30 | width: 500px; 31 | text-align: center; 32 | font-size: 36px; 33 | position: relative; 34 | top: 70px; 35 | color: white; 36 | font-weight: bolder; 37 | } 38 | 39 | /*Half size for small screens, eg: mobile in landscape*/ 40 | @media (max-width:1000px){ 41 | #MapName { 42 | height:95px; 43 | width:250px; 44 | margin-left: -125px; 45 | } 46 | #MapName .container .mapbg { 47 | height: 95px; 48 | width: 250px; 49 | position: relative; 50 | } 51 | 52 | #MapName .mapsubtitle { 53 | height: 15px; 54 | width: 250px; 55 | position: relative; 56 | color: white; 57 | font-weight: bolder; 58 | text-align: center; 59 | top: 35px; 60 | font-size: 8px; 61 | } 62 | 63 | #MapName .maptitle { 64 | height: 40px; 65 | width: 250px; 66 | text-align: center; 67 | font-size: 18px; 68 | position: relative; 69 | top: 35px; 70 | color: white; 71 | font-weight: bolder; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/UI/Components/CharCreate/CharCreatev2/CharCreatev2.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | 7 |
8 |
9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 |