Skip to content
This repository was archived by the owner on Feb 21, 2019. It is now read-only.

Commit f78c687

Browse files
committed
Introduce Trade UI / Engine
1 parent cef5be9 commit f78c687

6 files changed

Lines changed: 802 additions & 10 deletions

File tree

src/Engine/MapEngine.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ define(function( require )
138138
require('./MapEngine/ChatRoom').call();
139139
require('./MapEngine/Pet').call();
140140
require('./MapEngine/Store').call();
141+
require('./MapEngine/Trade').call();
141142
}
142143

143144

src/Engine/MapEngine/Trade.js

Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
/**
2+
* Engine/MapEngine/Trade.js
3+
*
4+
* Manage Trade packets
5+
* TODO: PACKET.CZ.REQ_EXCHANGE_ITEM
6+
*
7+
* This file is part of ROBrowser, Ragnarok Online in the Web Browser (http://www.robrowser.com/).
8+
*
9+
* @author Vincent Thibault
10+
*/
11+
define(function( require )
12+
{
13+
'use strict';
14+
15+
16+
/**
17+
* Load dependencies
18+
*/
19+
var DB = require('DB/DBManager');
20+
var Network = require('Network/NetworkManager');
21+
var PACKET = require('Network/PacketStructure');
22+
var Trade = require('UI/Components/Trade/Trade');
23+
var ChatBox = require('UI/Components/ChatBox/ChatBox');
24+
var UIManager = require('UI/UIManager');
25+
26+
27+
/**
28+
* Convert GID to a random string
29+
* It's used in the official client
30+
*
31+
* @param {number} GID
32+
* @param {string} randrom string
33+
*/
34+
function TradeGIDEncoding(GID)
35+
{
36+
var table = 'ROHUTNASEW';
37+
var str, out;
38+
var i, count;
39+
40+
str = String(GID);
41+
out = '';
42+
43+
for (i = 0, count = str.length; i < count; ++i) {
44+
out += table[ str[i] ];
45+
}
46+
47+
return out;
48+
}
49+
50+
51+
/**
52+
* Someone ask to start a trade
53+
* @param {object} pkt - PACKET.ZC.REQ_EXCHANGE_ITEM
54+
*/
55+
function onTradeRequest( pkt )
56+
{
57+
function answer(value) {
58+
return function() {
59+
var pkt = new PACKET.CZ.ACK_EXCHANGE_ITEM();
60+
pkt.result = value;
61+
Network.sendPacket(pkt);
62+
};
63+
}
64+
65+
var text = '(' + pkt.name + ') ' + DB.getMessage(93) + ('level' in pkt ? '\n' + 'Lv. ' + pkt.level : '');
66+
Trade.title = pkt.name;
67+
68+
if ('level' in pkt) {
69+
Trade.title += ' Lv' + pkt.level;
70+
}
71+
72+
if ('GID' in pkt) {
73+
Trade.title += ' (' + TradeGIDEncoding(pkt.GID) +')';
74+
}
75+
76+
UIManager.showPromptBox( text, 'ok', 'cancel', answer(3), answer(4));
77+
}
78+
79+
80+
/**
81+
* Result about trade ask
82+
* @param {object} pkt - PACKET.ZC.ACK_EXCHANGE_ITEM
83+
*/
84+
function onTradeRequestAnswer( pkt )
85+
{
86+
switch (pkt.result) {
87+
case 0: // Char is too far
88+
ChatBox.addText( DB.getMessage(70), ChatBox.TYPE.ERROR);
89+
break;
90+
91+
92+
case 1: // Character does not exist
93+
ChatBox.addText( DB.getMessage(71), ChatBox.TYPE.ERROR);
94+
break;
95+
96+
case 2: // In another deal
97+
ChatBox.addText( DB.getMessage(72), ChatBox.TYPE.ERROR);
98+
break;
99+
100+
case 3:
101+
Trade.append();
102+
break;
103+
104+
case 4: // Cancel
105+
ChatBox.addText( DB.getMessage(74), ChatBox.TYPE.ERROR);
106+
break;
107+
108+
case 5: // AFK ?
109+
break;
110+
}
111+
}
112+
113+
114+
/**
115+
* Try to add an item to the list
116+
*
117+
* @param {number} item index in inventory
118+
* @param {number} count
119+
*/
120+
Trade.reqAddItem = function reqAddItem( index, count )
121+
{
122+
var pkt = new PACKET.CZ.ADD_EXCHANGE_ITEM();
123+
pkt.index = index;
124+
pkt.count = count;
125+
126+
Network.sendPacket(pkt);
127+
};
128+
129+
130+
/**
131+
* Response from the server when requesting to add an item.
132+
*
133+
* @param {object} pkt - PACKET.ZC.ACK_ADD_EXCHANGE_ITEM
134+
*/
135+
function onAddItemResult( pkt )
136+
{
137+
switch (pkt.result) {
138+
case 1: // overweight
139+
ChatBox.addText( DB.getMessage(73), ChatBox.TYPE.ERROR);
140+
break;
141+
142+
case 2: // trade canceled
143+
ChatBox.addText( DB.getMessage(74), ChatBox.TYPE.ERROR);
144+
break;
145+
}
146+
147+
Trade.addItemFromInventory(pkt.Index, pkt.result === 0);
148+
}
149+
150+
151+
/**
152+
* Oher user added another item
153+
*
154+
* @param {object} pkt - PACKET.ZC.ADD_EXCHANGE_ITEM
155+
*/
156+
function onItemAdded( pkt )
157+
{
158+
Trade.addItem(pkt);
159+
}
160+
161+
162+
/**
163+
* Reject deal
164+
*/
165+
Trade.onCancel = function onCancel()
166+
{
167+
var pkt = new PACKET.CZ.CANCEL_EXCHANGE_ITEM();
168+
Network.sendPacket(pkt);
169+
};
170+
171+
172+
/**
173+
* Deal canceled
174+
*
175+
* @param {object} pkt - PACKET.ZC.CANCEL_EXCHANGE_ITEM
176+
*/
177+
function onTradeCancel( pkt )
178+
{
179+
ChatBox.addText( DB.getMessage(74), ChatBox.TYPE.ERROR);
180+
Trade.remove();
181+
}
182+
183+
184+
/**
185+
* Conclude the deal
186+
*/
187+
Trade.onConclude = function onConclude()
188+
{
189+
var pkt = new PACKET.CZ.CONCLUDE_EXCHANGE_ITEM();
190+
Network.sendPacket(pkt);
191+
};
192+
193+
194+
/**
195+
* Conclude a part of the trade
196+
*
197+
* @param {object} pkt - PACKET.ZC.CONCLUDE_EXCHANGE_ITEM
198+
*/
199+
function onTradeConclude( pkt )
200+
{
201+
Trade.conclude( pkt.who ? 'recv' : 'send' );
202+
}
203+
204+
205+
/**
206+
* Submit the trade
207+
*/
208+
Trade.onTradeSubmit = function onTradeSubmit()
209+
{
210+
var pkt = new PACKET.CZ.EXEC_EXCHANGE_ITEM();
211+
Network.sendPacket(pkt);
212+
};
213+
214+
215+
/**
216+
* Result of the deal
217+
*
218+
* @param {object} pkt - PACKET.ZC.EXEC_EXCHANGE_ITEM
219+
*/
220+
function onTradeSubmitAnswer( pkt )
221+
{
222+
// Fail
223+
if (pkt.result === 1) {
224+
ChatBox.addText( DB.getMessage(76), ChatBox.TYPE.ERROR);
225+
Trade.remove();
226+
return;
227+
}
228+
229+
//TODO: Give items...
230+
ChatBox.addText( DB.getMessage(75), ChatBox.TYPE.BLUE);
231+
Trade.remove();
232+
}
233+
234+
235+
/**
236+
* Initialize
237+
*/
238+
return function MainEngine()
239+
{
240+
Network.hookPacket(PACKET.ZC.REQ_EXCHANGE_ITEM, onTradeRequest);
241+
Network.hookPacket(PACKET.ZC.REQ_EXCHANGE_ITEM2, onTradeRequest);
242+
Network.hookPacket(PACKET.ZC.ACK_EXCHANGE_ITEM, onTradeRequestAnswer);
243+
Network.hookPacket(PACKET.ZC.ACK_EXCHANGE_ITEM2, onTradeRequestAnswer);
244+
Network.hookPacket(PACKET.ZC.ACK_ADD_EXCHANGE_ITEM, onAddItemResult);
245+
Network.hookPacket(PACKET.ZC.ADD_EXCHANGE_ITEM, onItemAdded);
246+
Network.hookPacket(PACKET.ZC.ADD_EXCHANGE_ITEM2, onItemAdded);
247+
Network.hookPacket(PACKET.ZC.CANCEL_EXCHANGE_ITEM, onTradeCancel);
248+
Network.hookPacket(PACKET.ZC.CONCLUDE_EXCHANGE_ITEM, onTradeConclude);
249+
Network.hookPacket(PACKET.ZC.EXEC_EXCHANGE_ITEM, onTradeSubmitAnswer);
250+
};
251+
});

src/Network/PacketRegister.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ define( ['./PacketStructure' ], function( PACKET )
9696
0xdd: PACKET.ZC.MEMBER_EXIT, // ok
9797
0xdf: PACKET.ZC.CHANGE_CHATROOM, // ok
9898
0xe1: PACKET.ZC.ROLE_CHANGE, // ok
99-
0xe5: PACKET.ZC.REQ_EXCHANGE_ITEM,
100-
0xe7: PACKET.ZC.ACK_EXCHANGE_ITEM,
101-
0xe9: PACKET.ZC.ADD_EXCHANGE_ITEM,
102-
0xea: PACKET.ZC.ACK_ADD_EXCHANGE_ITEM,
103-
0xec: PACKET.ZC.CONCLUDE_EXCHANGE_ITEM,
104-
0xee: PACKET.ZC.CANCEL_EXCHANGE_ITEM,
105-
0xf0: PACKET.ZC.EXEC_EXCHANGE_ITEM,
99+
0xe5: PACKET.ZC.REQ_EXCHANGE_ITEM, // ok
100+
0xe7: PACKET.ZC.ACK_EXCHANGE_ITEM, //ok
101+
0xe9: PACKET.ZC.ADD_EXCHANGE_ITEM, // ok
102+
0xea: PACKET.ZC.ACK_ADD_EXCHANGE_ITEM, // ok
103+
0xec: PACKET.ZC.CONCLUDE_EXCHANGE_ITEM, // ok
104+
0xee: PACKET.ZC.CANCEL_EXCHANGE_ITEM, // ok
105+
0xf0: PACKET.ZC.EXEC_EXCHANGE_ITEM, // ok
106106
0xf1: PACKET.ZC.EXCHANGEITEM_UNDO,
107107
0xf2: PACKET.ZC.NOTIFY_STOREITEM_COUNTINFO, // ok
108108
0xf4: PACKET.ZC.ADD_ITEM_TO_STORE, // ok
@@ -270,8 +270,8 @@ define( ['./PacketStructure' ], function( PACKET )
270270
0x1f1: PACKET.AC.NOTIFY_ERROR,
271271
0x1f2: PACKET.ZC.UPDATE_CHARSTAT2,
272272
0x1f3: PACKET.ZC.NOTIFY_EFFECT2, // ok
273-
0x1f4: PACKET.ZC.REQ_EXCHANGE_ITEM2,
274-
0x1f5: PACKET.ZC.ACK_EXCHANGE_ITEM2,
273+
0x1f4: PACKET.ZC.REQ_EXCHANGE_ITEM2, // ok
274+
0x1f5: PACKET.ZC.ACK_EXCHANGE_ITEM2, // ok
275275
0x1f6: PACKET.ZC.REQ_BABY,
276276
0x1f8: PACKET.ZC.START_BABY,
277277
0x1fc: PACKET.ZC.REPAIRITEMLIST,
@@ -479,7 +479,7 @@ define( ['./PacketStructure' ], function( PACKET )
479479
0x80b: PACKET.ZC.PARTY_BOOKING_NOTIFY_DELETE,
480480
0x80d: PACKET.ZC.SIMPLE_CASH_BTNSHOW,
481481
0x80e: PACKET.ZC.NOTIFY_HP_TO_GROUPM_R2, // ok
482-
0x80f: PACKET.ZC.ADD_EXCHANGE_ITEM2,
482+
0x80f: PACKET.ZC.ADD_EXCHANGE_ITEM2, // ok
483483
0x810: PACKET.ZC.OPEN_BUYING_STORE,
484484
0x812: PACKET.ZC.FAILED_OPEN_BUYING_STORE_TO_BUYER,
485485
0x813: PACKET.ZC.MYITEMLIST_BUYING_STORE,

0 commit comments

Comments
 (0)