MrUnzO
-
Posts
24 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Posts posted by MrUnzO
-
-
Akkarin is right. You have to understand all of roBrowser code and understand how it works but I can point somethings to you, @simplyniceweb.
The packets that i gave to you is for handle an outgoing to the server (that why you server accept the login) and after that server will replay an information to the client (roBrowser in this case) and the client need to understand the packets that its received from the server. in your picture I see the packet incoming is 0xac4 its a AC_ACCEPT_LOGIN3 (how I knew it? I just search that packet in rathena src folder and understand the structure of it) after i understand the packet structure I need to implement it in roBrowser like this.
in the PacketStructure.js3// 0xac4 PACKET.AC.ACCEPT_LOGIN3 = function PACKET_AC_ACCEPT_LOGIN3(fp, end) { this.AuthCode = fp.readLong(); this.AID = fp.readULong(); this.userLevel = fp.readULong(); this.lastLoginIP = fp.readULong(); this.lastLoginTime = fp.readBinaryString(26); this.Sex = fp.readUChar(); var dummy = fp.readBinaryString(17); this.ServerList = (function() { var i, count=(end-fp.tell())/160|0, out=new Array(count); for (i = 0; i < count; ++i) { out[i] = {}; out[i].ip = fp.readULong(); out[i].port = fp.readUShort(); out[i].name = fp.readString(20); out[i].usercount = fp.readUShort(); out[i].state = fp.readUShort(); out[i].property = fp.readUShort(); var dummy = fp.readBinaryString(128); } return out; })(); }; PACKET.AC.ACCEPT_LOGIN3.size = -1;
after I implemented in the PacketStructure.js so I need to use it as a parse when roBrowser received the packet (how to know where to use it?, just search 'ACCEPT_LOGIN') and I found the place where to use it, LoginEngine.js
just hook this PacketStructure (function) to the Function that handle the information
Network.hookPacket( PACKET.AC.ACCEPT_LOGIN3, onConnectionAccepted );
hope you get some point.
I just need ppl to revive this great work that Keyworld started. I'm in. how about you guys?
I will opensource mind in soon let's revive this great work together!
ps. sorry for my bad english -
On 4/26/2020 at 12:28 PM, simplyniceweb said:
How can we get the packets like above for a specific client like 2017-06-14, is there any way @Akkarin?
Hello good sir, may i know how did you get those packets for 2018-06-20 to be supported by roBrowser? can you help me with the 2017-06-14 client? Have a good day!
Here is my 2017-06-14 i made before
20170614: [ [PACKET.CZ.ITEM_THROW,0x0367,6,2,4], //packet(0x0367,6,clif_parse_DropItem,2,4); [PACKET.CZ.REQUEST_MOVE,0x0361,5,2], //packet(0x0361,5,clif_parse_WalkToXY,2); [PACKET.CZ.ACK_STORE_PASSWORD,0x0437,36,0], //packet(0x0437,36,clif_parse_StoragePassword,0); [PACKET.CZ.USE_SKILL_TOGROUND,0x0838,10,2,4,6,8], //packet(0x0838,10,clif_parse_UseSkillToPos,2,4,6,8); [PACKET.CZ.REQUEST_ACT,0x083C,7,2,6], //packet(0x083C,7,clif_parse_ActionRequest,2,6); [PACKET.CZ.REQ_CLICK_TO_BUYING_STORE,0x0860,6,2], //packet(0x0860,6,clif_parse_ReqClickBuyingStore,2); [PACKET.CZ.ADD_FRIENDS,0x0867,26,2], //packet(0x0867,26,clif_parse_FriendsListAdd,2); [PACKET.CZ.REQ_CLOSE_BUYING_STORE,0x086B,2,0], //packet(0x086B,2,clif_parse_ReqCloseBuyingStore,0); [PACKET.CZ.SEARCH_STORE_INFO,0x086C,-1,2,4,5,9,13,14,15], //packet(0x086C,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); [PACKET.CZ.PARTY_BOOKING_REQ_REGISTER,0x0877,18,2,4], //packet(0x0877,18,clif_parse_PartyBookingRegisterReq,2,4); [PACKET.CZ.CHANGE_DIRECTION,0x087E,5,2,4], //packet(0x087E,5,clif_parse_ChangeDir,2,4); [PACKET.CZ.USE_SKILL_TOGROUNDMoreInfo,0x0889,90,2,4,6,8,10], //packet(0x0889,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); [PACKET.CZ.REQ_JOIN_GROUP,0x0899,26,2], //packet(0x0899,26,clif_parse_PartyInvite2,2); [PACKET.CZ.REQ_TRADE_BUYING_STORE,0x089D,-1,2,4,8,12], [PACKET.CZ.REQ_OPEN_BUYING_STORE,0x08A2,-1,2,4,8,9,89], //packet(0x08A2,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); [PACKET.CZ.ITEM_PICKUP,0x08AD,6,2], //packet(0x08AD,6,clif_parse_TakeItem,2); [PACKET.CZ.REQ_TRADE_BUYING_STORE,0x092F,-1,2,4,8,12], //packet(0x092F,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); [PACKET.CZ.USE_SKILL,0x091B,10,2,4,6], //packet(0x091B,10,clif_parse_UseSkillToId,2,4,6); //packet(0x0928,2,clif_parse_SearchStoreInfoNextPage,0); [PACKET.CZ.REQNAME,0x0936,6,2], //packet(0x0936,6,clif_parse_GetCharNameRequest,2); [PACKET.CZ.ENTER,0x0944,19,2,6,10,14,18], //packet(0x0944,19,clif_parse_WantToConnection,2,6,10,14,18); [PACKET.CZ.MOVE_ITEM_FROM_BODY_TO_STORE,0x0879,8,2,4], [PACKET.CZ.MOVE_ITEM_FROM_STORE_TO_BODY,0x023B,8,2,4], /* // 2017-06-14bRagexeRE packet(0x0364,5,clif_parse_HomMenu,2,4); //packet(0x0865,4,NULL,0); // CZ_GANGSI_RANK packet(0x0866,6,clif_parse_TickSend,2); packet(0x087D,6,clif_parse_SolveCharName,2); //packet(0x0957,8,NULL,0); // CZ_JOIN_BATTLE_FIELD packet(0x0963,12,clif_parse_SearchStoreInfoListItemClick,2,6,10); */ ],
I can't remember, but there is some PacketRegister to register more and implement PacketStructure for support incoming packet need to figure out
-
now I am developing Node Webkit roBrowser and it's working great. I'm planing about open source. Hope community support the project because I'm not good at webgl. The client, Node Webkit roBrowser support 2018-06-20 packet version.
- 2
-
On 2/8/2020 at 11:40 PM, BFPkiller said:
is this revival still alive ??
yeah he decided to closed source, called XPRO Client
-
On 4/15/2018 at 10:46 AM, Jhedzkie said:
Why is that?
Wouldn't adding specific random option group per slot take a lot more lines to cover for all items you want to have random options?
I am currently using my own implementation based on the existing item_random_option_group db file and this is how it looks like. It still follows the same structure,but the point is that it does not define what will be the random options available to that certain type of item, instead, it defines what are the available random options that item type can have.
// <randopt_groupid>,<rate>,<randopt_id1>,<randopt_value1>,<randopt_param1>{,<randopt_id2>,<randopt_value2>,<randopt_param2>,<randopt_id3>,<randopt_value3>,<randopt_param3>,<randopt_id4>,<randopt_value4>,<randopt_param4>,<randopt_id5>,<randopt_value5>,<randopt_param5>} and so on and so forth. just how many do you like this line to have. lmfao.
See I only had up to line 196 and i covered all of the equip types dagger to 2-h staves and armor to accessories each with different set of random options. and in my case, I only made small changes to the source so that the group that will be randomized will not reflect as is/whereis, instead, will just randomly pick which number of options (1-5) will reflect to the equip.
For example, a Clip[1].
Using my random option group for accessory.RDMOPTG_ACCESSORY,25,RDMOPT_VAR_STRAMOUNT, 5,0,RDMOPT_VAR_AGIAMOUNT, 5,0,RDMOPT_VAR_VITAMOUNT, 5,0,RDMOPT_VAR_INTAMOUNT, 5,0,RDMOPT_VAR_DEXAMOUNT, 5,0,RDMOPT_VAR_LUKAMOUNT, 5,0,RDMOPT_VAR_HPACCELERATION, 5,0,RDMOPT_VAR_SPACCELERATION, 5,0,RDMOPT_VAR_PLUSASPD,1,0,RDMOPT_VAR_PLUSASPDPERCENT, 5,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 2,0,RDMOPT_HEAL_VALUE, 2,0,RDMOPT_HEAL_MODIFY_PERCENT, 2,0,RDMOPT_DEC_SPELL_CAST_TIME, 2,0,RDMOPT_DEC_SPELL_DELAY_TIME, 2,0 RDMOPTG_ACCESSORY,20,RDMOPT_VAR_STRAMOUNT, 8,0,RDMOPT_VAR_AGIAMOUNT, 8,0,RDMOPT_VAR_VITAMOUNT, 8,0,RDMOPT_VAR_INTAMOUNT, 8,0,RDMOPT_VAR_DEXAMOUNT, 8,0,RDMOPT_VAR_LUKAMOUNT, 8,0,RDMOPT_VAR_HPACCELERATION, 8,0,RDMOPT_VAR_SPACCELERATION, 8,0,RDMOPT_VAR_PLUSASPD,2,0,RDMOPT_VAR_PLUSASPDPERCENT, 8,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 4,0,RDMOPT_HEAL_VALUE, 4,0,RDMOPT_HEAL_MODIFY_PERCENT, 4,0,RDMOPT_DEC_SPELL_CAST_TIME, 5,0,RDMOPT_DEC_SPELL_DELAY_TIME, 5,0 RDMOPTG_ACCESSORY,10,RDMOPT_VAR_STRAMOUNT,12,0,RDMOPT_VAR_AGIAMOUNT,12,0,RDMOPT_VAR_VITAMOUNT,12,0,RDMOPT_VAR_INTAMOUNT,12,0,RDMOPT_VAR_DEXAMOUNT,12,0,RDMOPT_VAR_LUKAMOUNT,12,0,RDMOPT_VAR_HPACCELERATION,12,0,RDMOPT_VAR_SPACCELERATION,12,0,RDMOPT_VAR_PLUSASPD,3,0,RDMOPT_VAR_PLUSASPDPERCENT,12,0,RDMOPT_VAR_CRITICALSUCCESSVALUE, 7,0,RDMOPT_HEAL_VALUE, 7,0,RDMOPT_HEAL_MODIFY_PERCENT, 7,0,RDMOPT_DEC_SPELL_CAST_TIME,10,0,RDMOPT_DEC_SPELL_DELAY_TIME,10,0 RDMOPTG_ACCESSORY, 5,RDMOPT_VAR_STRAMOUNT,15,0,RDMOPT_VAR_AGIAMOUNT,15,0,RDMOPT_VAR_VITAMOUNT,15,0,RDMOPT_VAR_INTAMOUNT,15,0,RDMOPT_VAR_DEXAMOUNT,15,0,RDMOPT_VAR_LUKAMOUNT,15,0,RDMOPT_VAR_HPACCELERATION,15,0,RDMOPT_VAR_SPACCELERATION,15,0,RDMOPT_VAR_PLUSASPD,4,0,RDMOPT_VAR_PLUSASPDPERCENT,15,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,10,0,RDMOPT_HEAL_VALUE,10,0,RDMOPT_HEAL_MODIFY_PERCENT,10,0,RDMOPT_DEC_SPELL_CAST_TIME,15,0,RDMOPT_DEC_SPELL_DELAY_TIME,15,0 RDMOPTG_ACCESSORY, 2,RDMOPT_VAR_STRAMOUNT,18,0,RDMOPT_VAR_AGIAMOUNT,18,0,RDMOPT_VAR_VITAMOUNT,18,0,RDMOPT_VAR_INTAMOUNT,18,0,RDMOPT_VAR_DEXAMOUNT,18,0,RDMOPT_VAR_LUKAMOUNT,18,0,RDMOPT_VAR_HPACCELERATION,18,0,RDMOPT_VAR_SPACCELERATION,18,0,RDMOPT_VAR_PLUSASPD,5,0,RDMOPT_VAR_PLUSASPDPERCENT,18,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,12,0,RDMOPT_HEAL_VALUE,12,0,RDMOPT_HEAL_MODIFY_PERCENT,12,0,RDMOPT_DEC_SPELL_CAST_TIME,20,0,RDMOPT_DEC_SPELL_DELAY_TIME,20,0 RDMOPTG_ACCESSORY, 1,RDMOPT_VAR_STRAMOUNT,25,0,RDMOPT_VAR_AGIAMOUNT,25,0,RDMOPT_VAR_VITAMOUNT,25,0,RDMOPT_VAR_INTAMOUNT,25,0,RDMOPT_VAR_DEXAMOUNT,25,0,RDMOPT_VAR_LUKAMOUNT,25,0,RDMOPT_VAR_HPACCELERATION,25,0,RDMOPT_VAR_SPACCELERATION,25,0,RDMOPT_VAR_PLUSASPD,7,0,RDMOPT_VAR_PLUSASPDPERCENT,25,0,RDMOPT_VAR_CRITICALSUCCESSVALUE,15,0,RDMOPT_HEAL_VALUE,15,0,RDMOPT_HEAL_MODIFY_PERCENT,15,0,RDMOPT_DEC_SPELL_CAST_TIME,25,0,RDMOPT_DEC_SPELL_DELAY_TIME,25,0
So it has,
STR, AGI, VIT, INT, DEX, LUK, HP Regen, SP Regen, ASPD, ASPDRate, CritRate, Healing, HealingRate, Reduce Cast, Reduce Delay
So the rate is based on the 2nd value in the group definition right? So saying that you got the 25% so you got the first line. From there, my code is to randomize how many slots or how many random options will be awarded to the item. Lets say, it randomized to 3.
It will then lookup the rest of the line and randomly pick which 3 would reflect to the item. For example, it randomed INT, SP Acceleration, and Healing Rate. It will then reflect to the Clip[1] INT+5, Increase SP Regen by 5%, and Healing Power +2%.
Well, if you really want to modify the current db structure, the best way to go is to just add min and max value so that it can be randomed source side. make the structure like// <randopt_groupid>,<rate>,<randopt_id1>,<randopt_value_min1>,<randopt_value_max1>,<randopt_param1>{,<randopt_id2>,<randopt_value_min2>,<randopt_value_max2>,...}
That should solve your problem, right?
I don't know if I understood it well, but this is just my take on it.
Hi, sorry for reviving this dead post but can i ask you for src to find how many random options will be awarded to item?
-
14 hours ago, Waken said:
@Akkarin There's a lot of effort to do if you want to complete all the effects that are missing from robrowser, and you know... make robrowser reach the official behavior in all expects, that's something i would love to see in the future, i respect closed-projects but since robrowser was created to be open-sourced that's not cool at all.
@MrUnzOThe Electron implementation is quite simple, at least to have a prototype, the hard part i guess is to make it secure.That's why i use NWJS, in case your case compile your sourcecode to V8 binary and get better performance. I am success with NWJS its playable and running smooth. I also modified the sourcecode to make it read the local grf files that in the same root directory like an official does
-
35 minutes ago, Akkarin said:
If XPRO is web-based (with apparent apk files for mobile) though pretty-much built on roBrowser's source, but you have to pay for a license to use it. roBrowser has always been intended to be open-source. Vykimo could've just continued work on roBrowser instead of being money hungry. There are other roBrowser continuations where many of the newer features have been added in separate forks. I myself use rAthena and roBrowser in a completely different context and host an online gardening game with it. If you understand javascript, it's actually not that difficult to implement the features that are missing.
could you please link that gardening game? I need to check it
I also implement some features and already merged on @MrAntares repo -
15 hours ago, Waken said:
I tried it with Electron, i guess that xpro client from Vykimo is using it.
I never heard about XPro client before and look at it OMG what a great implement but sadly it closed source. what about yours?
-
I am working on this great project again and I use it with NWJS
-
My dream come true! Finally we have client that open source and active until now!
You are the man to do the great work like this! -
This repository is uptodate and some improvement.
https://github.com/MrAntares/Ragna.roBrowser -
I'm always following this project!
-
On 2/7/2018 at 10:22 PM, Phaige said:
Anyone know how to fix this?
same here.. how to fix this?
-
Good news now nodejs support webworker and do we can move roBrowser to NW.js (know as NodeWebkit.js) ?
-
I saw you ask this question for long time and answer is yes, you can use roBrowser to play along with Official client and it's just client to render the game activities.
- 1
-
I just saw Keyworld commit code on Github! yeah yeah He get back to develop it!
-
This is AWESOME!! I'm looking for mod this client to something like a new game!!
Yes, this is what i'm doing too!
Wow this is great can you please show us?
I'm stuck at sprite rendering can you suggest me about this?
Keyworld, he made a good work for optimizing and this make code so complex for me
-
work great! I'm waiting for release!!
-
Can i make this with another position like a body, when you wear a custom shirt and sprite of shirt appear on character? some one did this?
-
This is AWESOME!! I'm looking for mod this client to something like a new game!!
-
Please make it .. i don't now how to make the client work.
Make RO great again
in Project Concepts & In Progress
Posted
Its still alive, @Temtaime just comment on github 10 days ago.