Thread Rating:
- 0 Votes - 0 Average
- 1
- 2
- 3
- 4
- 5
Shop Sell packet
|
Author |
Message |
Skul 
Master
 
Posts: 413
Likes Given: 0
Likes Received: 19 in 15 posts
Joined: Jun 2012
Reputation: 9
![]()
|
Shop Sell packet
I redid the Shop Sell packet on my server and I'm having a problem that I can't understand. When trying to buy from a provisioner NPC, I get a total packet length of 1002 characters and spheresvr.exe returns a 'Packet Too Big' error. This does not allow anyone to buy from a provisioner. Then on the other hand I can buy from an armorer even though the packet length is over 3000 characters.
Here's the code:
Code:
[function f_packet_0x09e]
if (<uid.<argn2>.ischar>)
if (<uid.<argn2>.npc>==brain_vendor)
ctag.buysell=<argn1>
if (<dargn1>==1)
if (<uid.<argn2>.findlayer.28.rescount>)
forcont <findlayer.21>
if (<uid.<argn2>.findlayer.28.findid.<baseid>>)
if (<tag0.override.value>) || (<value>)
if (<dlocal.x> < <ddef0.vendor_limit_sell>)
local.x += 1
local.uid<dlocal.x>=<uid>
local.uid<dlocal.x>.amount=<amount>
if (<tag0.override.value>)
local.uid<dlocal.x>.value=<tag0.override.value>
else
local.uid<dlocal.x>.value=<value>
endif
endif
endif
endif
endfor
if (<local.x>)
for x 1 <local.x>
if (strmatch(<local.packet>,0))
local.packet=d<local.uid<dlocal.x>> w<uid.<local.uid<dlocal.x>>.dispiddec> w<uid.<local.uid<dlocal.x>>.color> w<uid.<local.uid<dlocal.x>>.amount> w<uid.<local.uid<dlocal.x>>.value> w<qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <eval strlen(<uid.<local.uid<dlocal.x>>.name>)>:<ddef0.vendor_limit_names>> <qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <asc <uid.<local.uid<dlocal.x>>.name>>:<strsub 0 <eval <eval <ddef0.vendor_limit_names> *4> +-1> <asc <uid.<local.uid<dlocal.x>>.name>>>>
else
local.packet=<local.packet> d<local.uid<dlocal.x>> w<uid.<local.uid<dlocal.x>>.dispiddec> w<uid.<local.uid<dlocal.x>>.color> w<uid.<local.uid<dlocal.x>>.amount> w<uid.<local.uid<dlocal.x>>.value> w<qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <eval strlen(<uid.<local.uid<dlocal.x>>.name>)>:<ddef0.vendor_limit_names>> <qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <asc <uid.<local.uid<dlocal.x>>.name>>:<strsub 0 <eval <eval <ddef0.vendor_limit_names> *4> +-1> <asc <uid.<local.uid<dlocal.x>>.name>>>>
endif
local.packetlength += <eval <qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <eval strlen(<uid.<local.uid<dlocal.x>>.name>)>:<ddef0.vendor_limit_names>> +14>
endfor
if (<dlocal.x> > 5)
uid.<argn2>.speak You have many items I am interested in.
else
uid.<argn2>.speak What would you like to sell?
endif
sendpacket 09e w<eval <local.packetlength> +9> d<argn2> w<local.x> <local.packet>
else
uid.<argn2>.speak Sorry you have nothing of interest.
endif
else
uid.<argn2>.speak Sorry I am not buying any items at this time.
endif
else
if (<uid.<argn2>.findlayer.26.rescount>)
forcont <uid.<argn2>.findlayer.26>
if (<tag0.override.value>) || (<value>)
if (<dlocal.x> < <ddef0.vendor_limit_buy>)
local.x += 1
local.uid<dlocal.x>=<uid>
if (<tag0.override.value>)
local.uid<dlocal.x>.value=<tag0.override.value>
else
local.uid<dlocal.x>.value=<value>
endif
endif
endif
endfor
endif
if (<uid.<argn2>.findlayer.27.rescount>)
forcont <uid.<argn2>.findlayer.27>
if (<tag0.override.value>) || (<value>)
if (<dlocal.x> < <ddef0.vendor_limit_buy>)
local.x += 1
local.uid<dlocal.x>=<uid>
if (<tag0.override.value>)
local.uid<dlocal.x>.value=<tag0.override.value>
else
local.uid<dlocal.x>.value=<value>
endif
endif
endif
endfor
endif
if (<local.x>)
for x 1 <local.x>
if (strmatch(<local.packet>,0))
local.packet=d<local.uid<dlocal.x>> w<uid.<local.uid<dlocal.x>>.dispiddec> w<uid.<local.uid<dlocal.x>>.color> w<uid.<local.uid<dlocal.x>>.amount> w<uid.<local.uid<dlocal.x>>.value> w<qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <eval strlen(<uid.<local.uid<dlocal.x>>.name>)>:<ddef0.vendor_limit_names>> <qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <asc <uid.<local.uid<dlocal.x>>.name>>:<strsub 0 <eval <eval <ddef0.vendor_limit_names> *4> +-1> <asc <uid.<local.uid<dlocal.x>>.name>>>>
else
local.packet=<local.packet> d<local.uid<dlocal.x>> w<uid.<local.uid<dlocal.x>>.dispiddec> w<uid.<local.uid<dlocal.x>>.color> w<uid.<local.uid<dlocal.x>>.amount> w<uid.<local.uid<dlocal.x>>.value> w<qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <eval strlen(<uid.<local.uid<dlocal.x>>.name>)>:<ddef0.vendor_limit_names>> <qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <asc <uid.<local.uid<dlocal.x>>.name>>:<strsub 0 <eval <eval <ddef0.vendor_limit_names> *4> +-1> <asc <uid.<local.uid<dlocal.x>>.name>>>>
endif
local.packetlength += <eval <qval <eval strlen(<uid.<local.uid<dlocal.x>>.name>)> < <ddef0.vendor_limit_names> ? <eval strlen(<uid.<local.uid<dlocal.x>>.name>)>:<ddef0.vendor_limit_names>> +14>
endfor
if (<dlocal.x> > 5)
uid.<argn2>.speak I have many goods for sale.
else
uid.<argn2>.speak What would you like to buy?
endif
ctag.buysell=
serv.b <eval strlen(<local.packet>)>
sendpacket 09e w<eval <local.packetlength> +9> d<argn2> w<local.x> <local.packet>
else
uid.<argn2>.speak Sorry I do not have any items in for sale at this time.
endif
endif
endif
endif
return 1
Any feedback? Looks complicated but this line here:
Code:
serv.b <eval strlen(<local.packet>)>
returns the total packet length.
How is it that 1002 characters is 'Too Big' while over 3000 characters is not?
Any feedback is much appreciated, thank you.
"I ask a question to the answer I already know."
Marchadium :: http://www.marchadium.ca/ :: Join us!
|
|
06-15-2014 11:57 AM |
|
|
Messages In This Thread |
Shop Sell packet - Skul - 06-15-2014 11:57 AM
|
User(s) browsing this thread: 2 Guest(s)