Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won

  • Feedback


MasterToma last won the day on October 14 2017

MasterToma had the most liked content!

Community Reputation

26 Excellent


About MasterToma

  • Rank

Profile Information

  • Current Mood
  • Gender
    Not Telling
  • Country

Recent Profile Visitors

969 profile views
  1. One comment skill_hit_time and reuse_delay depends on is_magic in the following way (e.g. reuse_delay): if ( is_magic == 1 ) { reuseDelay = user->m_reuseDelay / user->sharedData->baseMagAtkSpd * skllInfo->m_reuseDelay; } else if ( is_magic) // e.g. 2, 3, wahtever apart from 0 and 1 { reuseDelay = skllInfo->m_reuseDelay; } else { reuseDelay = user->m_reuseDelay / user->sharedData->basePhysAtkSpd * skllInfo->m_reuseDelay; } Taken just from C1 IDA. That it, skill reuse delays with is_magic=2 are not dependent on mattack speed
  2. There are IO buffer pools, limited to 4, 8 or 16 instances (depending on your machine and chronicles) and the same amount of IO threads. So simultaneously you can send 4 or 8 or 16 packets. And if you have 100 ppl online, at the 00:00 EXTRA 100 packets will be sent (apart from other packets, which are sending or queued for sending). Also, for L2Server MAX IO thread number depends on number of (virtual as well) processors. So, if you have machine with 4 cores, you will have only 4 IO buffer pools and 4 IO threads. This is pretty the reason for lag. Also, network throughput might be an issue as well. Bot most probably, both.
  3. 00:00 and 06:00 are sunrise/sunset events - there are broadcasts to ALL users. This might be a bottleneck
  4. Great! Btw, just if you missed - there are C1 services with fixes :)
  5. Why does it ask for l2comm... Write lin2db after cleaning the registry.
  6. Hi, As you know, there is no separate "Admin" socket for GM. But iv you send packet 00 (Version) with negative values, it will dump some information: import socket import struct port = 7777 # client accepting port host = '' # game server IP clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) clientsocket.connect((host, port)) # Preparing request my_bytes = bytearray() # size my_bytes.append(7) my_bytes.append(0) # packetId my_bytes.append(0) # -3 my_bytes.append(253) my_bytes.append(255) my_bytes.append(255) my_bytes.append(255) clientsocket.sendall(my_bytes) # Response unpacker = struct.Struct('h') size = unpacker.unpack(clientsocket.recv(unpacker.size))[0] - 2 #print "got packet with payload's size: %s" % size data = clientsocket.recv(size) #print('Received', repr(data)) # format: cdddddS unpacker = struct.Struct('<bIIIII') # c i i i i i msgId, npcConnected, maxUsers, usersConnected, usersPlaying, privateStores = unpacker.unpack(data[0:unpacker.size]) str_unpacker = struct.Struct('%ss' % (size - unpacker.size)) stats = str_unpacker.unpack(data[unpacker.size:])[0].decode('utf-16') print('msgId: %s, npcStatus (2 - Off, 1 - On): %s, maxUsers: %s, usersConnected: %s, usersPlaying: %s, privateStores: %s, stats (free memory, allocated objects, free pool slots, server Up time minutes): %s') % (msgId, npcConnected, maxUsers, usersConnected, usersPlaying, privateStores, stats) And results: This doesn't work for C4, they changed format a bit. But if you have IDA, you can check yourself
  7. This is inside L2OFF, so... You have to use Admin socket of CacheD... Otherwise you will get old data, races, and performance/security issues. Oh, also my kitty might get pregnant. Seriously, idea is very nice, I was looking for something like that, but all data should be taken from CacheD, because this module doesn't modify SQL each time, it's a CACHE. Also, taking something already prepared from memory is much more faster, then SQL query. About races - when your module get mature, and you would like to change data, no way to use SQL, since changes won't be visible in game, and even probably overridden by CacheD module.
  8. Try to remove everything under Software\\NCSoft\\L2AUTHD And start again (remember, there might be few keys Software\\NCSoft\\L2AUTHD in registry)
  9. All possible startup SQL queries are failed. Probably this user doesn't have rights to the lin2db, or something else is wrong in DB settings
  10. Take into account, that only L2NPC will load them at once, and send all 10000 packets to L2Server. But L2Server (at least C1) has 100 ms timeout for each NPC create packet, so you have also remove/reduce this on server side in order to show NPC
  11. Do you think I should comment every new message here? :) I'm still working on L2Server, have done skilldata parser/lexer (about 120 skill classes, 20 conditions, all parameters are parsed). Now I'm preparing testing environment in C#, to test whole stack (L2Server, L2AuthD, CacheD and L2NPC). It is needed, since I already have first messages from my L2Server. So, heads-up, work is in progress ;)
  12. Looks like I haven't published whole code. import socket port = 2108 host = '' clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) clientsocket.connect((host, port)) clientsocket.sendall(b'0\t6666\n') # kick user with UID=6666 from login server data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'1\t100\n') # change socket limit data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'2\n') # get socket size data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'3\tacc_name\n') # kick by acc name data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'4\t1\n') # GM mode ON data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'4\t0\n') # GM mode OFF data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'6\t192.168.0.110\n') # change GM IP data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'8\t0\n') # change servere mode to Paid data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'8\t1\n') # change servere mode to Free data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'9\tasdf\tasdf\tkey\n') # get login flag (acc name, pass, key) data = clientsocket.recv(1024) print('Received', repr(data)) clientsocket.sendall(b'10\tasdf\tasdf\tkey\n') # check user(acc name, pass, key) data = clientsocket.recv(1024) print('Received', repr(data)) # 0 means OK, 3 means user not found (wrong acc/pass) clientsocket.sendall(b'11\tasdf\tasdf\tkey\0\n') # kick user from game server user(acc name, pass, key, serverId) data = clientsocket.recv(1024) print('Received', repr(data)) # 4 means wrong server ID, 0 means OK, 5 means user not found Basic principles 1. data is sent in text format 2. first param - command ID 3. parameters are separated by tabulation (\t) 4. end of message is \n
  13. When completing C1, I will add SDK with API, which will allow you to extend it to C3, or write any other customs. If you want to contribute and join the project, PM me with your skype.
  14. I use this original C1 installer for client https://drive.google.com/open?id=0B6ic1ViGkLctb0FiOFIyM25LZVU And this patch for system https://drive.google.com/open?id=1LsAyKvSOOWES3SG9LSUqK9e7T60MQLFu (multi-window + Win7 support)
  15. @hugolez I used Windows 7, also Windows Server 2008. Everything newer should be OK as well. There might be some problems with Windows XP or Windows Server 2003, since I used 2017 c++ toolset, which doesn't have XP compatibility any more