1. char.cpp
  2. Aratılır,
  3. void CHARACTER::SetLevel(BYTE level)
  4. Bununla değiştirilir,
  5. void CHARACTER::SetLevel(int level)
  6. char.h
  7. Aratılır
  8. void SetLevel(BYTE level);
  9. Değiştirilir,
  10. void SetLevel(int level);
  11. Aratılır,
  12. BYTE level;
  13. (typedef struct character_point'in altında)
  14. Değiştirilir,
  15. int level;
  16. party.cpp
  17. Aratılır,
  18. void CParty::P2PSetMemberLevel(DWORD pid, BYTE level)
  19. Değiştirilir,
  20. void CParty::P2PSetMemberLevel(DWORD pid, int level)
  21. Aratılır,
  22. BYTE CParty::GetMemberMaxLevel()
  23. {
  24. BYTE bMax = 0;
  25. Değiştirilir,
  26. int CParty::GetMemberMaxLevel()
  27. {
  28. int bMax = 0;
  29. Aratılır,
  30. BYTE CParty::GetMemberMinLevel()
  31. {
  32. BYTE bMin = PLAYER_MAX_LEVEL_CONST;
  33. Değiştirilir,
  34. int CParty::GetMemberMinLevel()
  35. {
  36. int bMin = PLAYER_MAX_LEVEL_CONST;
  37. Aratılır,
  38. void CParty::RequestSetMemberLevel(DWORD pid, BYTE level)
  39. Değiştirilir,
  40. void CParty::RequestSetMemberLevel(DWORD pid, int level)
  41. party.h
  42. Aratılır
  43. BYTE bLevel;
  44. (typedef struct SMember 'ın altında)
  45. Değiştirilir,
  46. int bLevel;
  47. Aratılır,
  48. BYTE GetMemberMaxLevel();
  49. BYTE GetMemberMinLevel();
  50. Değiştirilir,
  51. int GetMemberMaxLevel();
  52. int GetMemberMinLevel();
  53. Aratılır,
  54. void RequestSetMemberLevel(DWORD pid, BYTE level);
  55. void P2PSetMemberLevel(DWORD pid, BYTE level);
  56. Değiştirilir,
  57. void RequestSetMemberLevel(DWORD pid, int level);
  58. void P2PSetMemberLevel(DWORD pid, int level);
  59. char_battle.cpp
  60. Aratılır,
  61. struct FPartyTotaler
  62. {
  63. int total;
  64. Değiştirilir,
  65. struct FPartyTotaler
  66. {
  67. long total;
  68. Aratılır,
  69. struct FPartyDistributor
  70. {
  71. int total;
  72. LPCHARACTER c;
  73. int x, y;
  74. DWORD _iExp;
  75. int m_iMode;
  76. int m_iMemberCount;
  77. FPartyDistributor(LPCHARACTER center, int member_count, int total, DWORD iExp, int iMode)
  78. Değiştirilir,
  79. struct FPartyDistributor
  80. {
  81. long total;
  82. LPCHARACTER c;
  83. int x, y;
  84. DWORD _iExp;
  85. int m_iMode;
  86. int m_iMemberCount;
  87. FPartyDistributor(LPCHARACTER center, int member_count, long total, DWORD iExp, int iMode)
  88. config.h
  89. Aratılır,
  90. extern BYTE PK_PROTECT_LEVEL;
  91. Değiştirilir,
  92. extern int PK_PROTECT_LEVEL;
  93. locale_service.cpp
  94. Aratılır,
  95. BYTE PK_PROTECT_LEVEL
  96. Değiştirilir,
  97. int PK_PROTECT_LEVEL
  98. constants.cpp
  99. ( Bu bölümde max level sınırını seçeceksiniz. Her bir dizinin altında aşağıda vereceğim resimdeki gibi 10'dan 120'ye vs source göre değişir.
  100. Leveller verilen expler var, siz en son 120'yse onların explerini kopyalayıp hemen altına yapıştırarak sadece //120 olan yerleri gerekli şekilde
  101. max level kaça kadar yaptıysanız 5'er 5'er artırarak yapacaksınız.)
  102. Örneğin 300 yapacaksanız sınırı, exp tabloları 300'e kadar gitmeli)
  103. Şimdi dosyamıza dönelim tekrar.
  104. constants.cpp açılır.
  105. const DWORD exp_table_euckr[PLAYER_EXP_TABLE_MAX + 1]
  106. const DWORD exp_table_common[PLAYER_EXP_TABLE_MAX + 1]
  107. const DWORD exp_table_newcibn[PLAYER_EXP_TABLE_MAX + 1 ]
  108. const DWORD party_exp_distribute_table[PLAYER_MAX_LEVEL_CONST + 1]
  109. const int aiExpLossPercents[PLAYER_EXP_TABLE_MAX + 1]
  110. Yukarıda belirtilen dizinler tek tek aratılır, ve aşağısında exp oranlarının tabloları yer alır,
  111. Bunları açıkladığım şekilde düzenleyin. Ayrıca const DWORD party_exp_distribute_table' a kadar aynı şekil ondan sonra biraz farklı durum ama
  112. anlayacaksınız gördüğünüzde aynı mantıkla onu da o şekilde düzenleyeceksiniz.
  113. log.h
  114. Aratılır,
  115. void LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, BYTE bLevel, BYTE bJob, DWORD dwPlayTime);
  116. Değiştirilir,
  117. void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, int bLevel, BYTE bJob, DWORD dwPlayTime)
  118. log.cpp
  119. Aratılır,
  120. void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, BYTE bLevel, BYTE bJob, DWORD dwPlayTime)
  121. Değiştirilir,
  122. void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, int bLevel, BYTE bJob, DWORD dwPlayTime)
  123. guild.h
  124. Aratılır,
  125. typedef struct SGuildMemberPacketData
  126. {
  127. DWORD pid;
  128. BYTE grade;
  129. BYTE is_general;
  130. BYTE job;
  131. BYTE level;
  132. DWORD offer;
  133. BYTE name_flag;
  134. char name[CHARACTER_NAME_MAX_LEN+1];
  135. } TGuildMemberPacketData;
  136. Değiştirilir,
  137. typedef struct SGuildMemberPacketData
  138. {
  139. DWORD pid;
  140. BYTE byGrade;
  141. BYTE byIsGeneral;
  142. BYTE byJob;
  143. int byLevel;
  144. DWORD dwOffer;
  145. BYTE byNameFlag;
  146. } TGuildMemberPacketData;
  147. Aratılır,
  148. void ChangeMemberData(DWORD pid, DWORD offer, BYTE level, BYTE grade);
  149. Değiştirilir,
  150. void ChangeMemberData(DWORD pid, DWORD offer, int level, BYTE grade);
  151. Aratılır,
  152. SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, BYTE level, DWORD offer_exp, char* name);
  153. Değiştirilir,
  154. SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, int level, DWORD offer_exp, char* name);
  155. Aratılır,
  156. DWORD pid; // player L×REşíRÇ id; primary key
  157. BYTE grade; // ±cµl»óRÇ ÇA·aRElîRÇ °c±T 1 to 15 (1RE ÂZ)
  158. BYTE is_general;
  159. BYTE job;
  160. BYTE level;
  161. DWORD offer_exp; // °rÇlÇN °cÇcÄ^
  162. BYTE _dummy;
  163. Değiştirilir,
  164. DWORD pid; // player L×REşíRÇ id; primary key
  165. BYTE grade; // ±cµl»óRÇ ÇA·aRElîRÇ °c±T 1 to 15 (1RE ÂZ)
  166. BYTE is_general;
  167. BYTE job;
  168. int level;
  169. DWORD offer_exp; // °rÇlÇN °cÇcÄ^
  170. BYTE _dummy;
  171. NOT : Bu kısımda değişik harfler var bunları bulamayabilir, DWORD pid; //player diye aratın. Harfleri görünce anlarsınız zaten
  172. Değiştirip kaydettikten sonra unicode uyarısı verebilir evet diyin buna, ( visual studio ile yapıyorsanız işlemleri)
  173. Aratılır,
  174. void LevelChange(DWORD pid, BYTE level);
  175. Değiştirilir,
  176. void LevelChange(DWORD pid, int level);
  177. guild.cpp
  178. Aratılır,
  179. BYTE level = (BYTE)strtoul(row[4], (char**) NULL, 10);
  180. Değiştirilir,
  181. int level = (int)strtoul(row[4], (char**) NULL, 10);
  182. Aratılır,
  183. sys_log(0, "GUILD: AddMember PID %u, grade %u, job %u, level %u, offer %u, name %s ptr %p",
  184. Değiştirilir,
  185. sys_log(0, "GUILD: AddMember PID %u, grade %u, job %u, level %d, offer %u, name %s ptr %p",
  186. Aratılır,
  187. void CGuild::ChangeMemberData(DWORD pid, DWORD offer, BYTE level, BYTE grade)
  188. Değiştirilir,
  189. void CGuild::ChangeMemberData(DWORD pid, DWORD offer, int level, BYTE grade)
  190. {
  191. TGuildMemberContainer::iterator cit = m_member.find(pid);
  192. if (cit == m_member.end())
  193. return;
  194. cit->second.offer_exp = offer;
  195. cit->second.level = level;
  196. cit->second.grade = grade;
  197. cit->second._dummy = 0;
  198. TPacketGCGuild pack;
  199. TGuildMemberPacketData mbData;
  200. pack.header = HEADER_GC_GUILD;
  201. pack.subheader = GUILD_SUBHEADER_GC_LIST;
  202. pack.size = sizeof(TPacketGCGuild);
  203. pack.size += sizeof(TGuildMemberPacketData);
  204. for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
  205. {
  206. LPDESC d = (*it)->GetDesc();
  207. if (d)
  208. {
  209. TEMP_BUFFER buf;
  210. buf.write(&pack, sizeof(pack));
  211. mbData.byNameFlag = 0;
  212. mbData.byGrade = cit->second.grade;
  213. mbData.byIsGeneral = cit->second.is_general;
  214. mbData.byJob = cit->second.job;
  215. mbData.byLevel = cit->second.level;
  216. mbData.dwOffer = cit->second.offer_exp;
  217. mbData.pid = cit->second.pid;
  218. buf.write(&mbData, sizeof(TGuildMemberPacketData));
  219. d->Packet(buf.read_peek(), buf.size());
  220. }
  221. }
  222. }
  223. Aratılır,
  224. void CGuild::LevelChange(DWORD pid, BYTE level)
  225. Değiştirilir,
  226. void CGuild::LevelChange(DWORD pid, int level)
  227. {
  228. TGuildMemberContainer::iterator cit = m_member.find(pid);
  229. if (cit == m_member.end())
  230. return;
  231. cit->second.level = level;
  232. TPacketGuildChangeMemberData gd_guild;
  233. gd_guild.guild_id = GetID();
  234. gd_guild.pid = pid;
  235. gd_guild.offer = cit->second.offer_exp;
  236. gd_guild.grade = cit->second.grade;
  237. gd_guild.level = level;
  238. db_clientdesc->DBPacket(HEADER_GD_GUILD_CHANGE_MEMBER_DATA, 0, &gd_guild, sizeof(gd_guild));
  239. TPacketGCGuild pack;
  240. TGuildMemberPacketData mbData;
  241. pack.header = HEADER_GC_GUILD;
  242. pack.subheader = GUILD_SUBHEADER_GC_LIST;
  243. pack.size = sizeof(TPacketGCGuild);
  244. pack.size += sizeof(TGuildMemberPacketData);
  245. cit->second._dummy = 0;
  246. for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
  247. {
  248. LPDESC d = (*it)->GetDesc();
  249. if (d)
  250. {
  251. TEMP_BUFFER buf;
  252. buf.write(&pack, sizeof(pack));
  253. mbData.byNameFlag = 0;
  254. mbData.byGrade = cit->second.grade;
  255. mbData.byIsGeneral = cit->second.is_general;
  256. mbData.byJob = cit->second.job;
  257. mbData.byLevel = cit->second.level;
  258. mbData.dwOffer = cit->second.offer_exp;
  259. mbData.pid = cit->second.pid;
  260. buf.write(&mbData, sizeof(TGuildMemberPacketData));
  261. d->Packet(buf.read_peek(), buf.size());
  262. }
  263. }
  264. }
  265. Aratılır,
  266. bool CGuild::OfferExp(LPCHARACTER ch, int amount)
  267. Değiştirilir,
  268. bool CGuild::OfferExp(LPCHARACTER ch, int amount)
  269. {
  270. TGuildMemberContainer::iterator cit = m_member.find(ch->GetPlayerID());
  271. if (cit == m_member.end())
  272. return false;
  273. if (m_data.exp+amount < m_data.exp)
  274. return false;
  275. if (amount < 0)
  276. return false;
  277. if (ch->GetExp() < (DWORD) amount)
  278. {
  279. ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±cµl> Á¦°rÇD°íRÚ ÇD´Â °cÇcÄ^°^ l¸Rş °cÇcÄ^ş¸´U ¸a¨R´D´U."));
  280. return false;
  281. }
  282. if (ch->GetExp() - (DWORD) amount > ch->GetExp())
  283. {
  284. sys_err("Wrong guild offer amount %d by %s[%u]", amount, ch->GetName(), ch->GetPlayerID());
  285. return false;
  286. }
  287. ch->PointChange(POINT_EXP, -amount);
  288. TPacketGuildExpUpdate guild_exp;
  289. guild_exp.guild_id = GetID();
  290. guild_exp.amount = amount / 100;
  291. db_clientdesc->DBPacket(HEADER_GD_GUILD_EXP_UPDATE, 0, &guild_exp, sizeof(guild_exp));
  292. GuildPointChange(POINT_EXP, amount / 100, true);
  293. cit->second.offer_exp += amount / 100;
  294. cit->second._dummy = 0;
  295. TPacketGCGuild pack;
  296. TGuildMemberPacketData mbData;
  297. pack.header = HEADER_GC_GUILD;
  298. pack.subheader = GUILD_SUBHEADER_GC_LIST;
  299. pack.size = sizeof(TPacketGCGuild);
  300. pack.size += sizeof(TGuildMemberPacketData);
  301. for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
  302. {
  303. LPDESC d = (*it)->GetDesc();
  304. if (d)
  305. {
  306. TEMP_BUFFER buf;
  307. buf.write(&pack, sizeof(pack));
  308. mbData.byNameFlag = 0;
  309. mbData.byGrade = cit->second.grade;
  310. mbData.byIsGeneral = cit->second.is_general;
  311. mbData.byJob = cit->second.job;
  312. mbData.byLevel = cit->second.level;
  313. mbData.dwOffer = cit->second.offer_exp;
  314. mbData.pid = cit->second.pid;
  315. buf.write(&mbData, sizeof(TGuildMemberPacketData));
  316. d->Packet(buf.read_peek(), buf.size());
  317. }
  318. }
  319. SaveMember(ch->GetPlayerID());
  320. TPacketGuildChangeMemberData gd_guild;
  321. gd_guild.guild_id = GetID();
  322. gd_guild.pid = ch->GetPlayerID();
  323. gd_guild.offer = cit->second.offer_exp;
  324. gd_guild.level = ch->GetLevel();
  325. gd_guild.grade = cit->second.grade;
  326. db_clientdesc->DBPacket(HEADER_GD_GUILD_CHANGE_MEMBER_DATA, 0, &gd_guild, sizeof(gd_guild));
  327. return true;
  328. }
  329. Aratılır,
  330. void CGuild::SendListPacket(LPCHARACTER ch)
  331. Değiştirilir,
  332. void CGuild::SendListPacket(LPCHARACTER ch)
  333. {
  334. /*
  335. List Packet
  336. Header
  337. Count (byte)
  338. [
  339. ...
  340. name_flag 1 - RE¸§R» ş¸l»´RlÄ lCş¸l»´RlÄ
  341. name CHARACTER_NAME_MAX_LEN+1
  342. ] * Count
  343. */
  344. LPDESC d;
  345. if (!(d=ch->GetDesc()))
  346. return;
  347. TPacketGCGuild pack;
  348. pack.header = HEADER_GC_GUILD;
  349. pack.size = sizeof(TPacketGCGuild);
  350. pack.subheader = GUILD_SUBHEADER_GC_LIST;
  351. pack.size += sizeof(TGuildMemberPacketData) * m_member.size();
  352. TEMP_BUFFER buf;
  353. TGuildMemberPacketData mbData;
  354. buf.write(&pack,sizeof(pack));
  355. char c[CHARACTER_NAME_MAX_LEN+1];
  356. for (TGuildMemberContainer::iterator it = m_member.begin(); it != m_member.end(); ++it)
  357. {
  358. it->second._dummy = 1;
  359. mbData.byNameFlag = 1;
  360. mbData.byGrade = it->second.grade;
  361. mbData.byIsGeneral = it->second.is_general;
  362. mbData.byJob = it->second.job;
  363. mbData.byLevel = it->second.level;
  364. mbData.dwOffer = it->second.offer_exp;
  365. mbData.pid = it->second.pid;
  366. buf.write(&mbData, sizeof(TGuildMemberPacketData));
  367. strlcpy(c, it->second.name.c_str(), MIN(sizeof(c), it->second.name.length() + 1));
  368. buf.write(c, CHARACTER_NAME_MAX_LEN+1 );
  369. if ( test_server )
  370. sys_log(0 ,"name %s job %d ", it->second.name.c_str(), it->second.job );
  371. }
  372. d->Packet(buf.read_peek(), buf.size());
  373. for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
  374. {
  375. SendLoginPacket(ch, *it);
  376. }
  377. for (TGuildMemberP2POnlineContainer::iterator it = m_memberP2POnline.begin(); it != m_memberP2POnline.end(); ++it)
  378. {
  379. SendLoginPacket(ch, *it);
  380. }
  381. }
  382. Aratılır,
  383. void CGuild::SendListOneToAll(DWORD pid)
  384. Değiştirilir,
  385. void CGuild::SendListOneToAll(DWORD pid)
  386. {
  387. TPacketGCGuild pack;
  388. pack.header = HEADER_GC_GUILD;
  389. pack.size = sizeof(TPacketGCGuild);
  390. pack.subheader = GUILD_SUBHEADER_GC_LIST;
  391. pack.size += sizeof(TGuildMemberPacketData);
  392. TGuildMemberPacketData mbData;
  393. char c[CHARACTER_NAME_MAX_LEN+1];
  394. memset(c, 0, sizeof(c));
  395. TGuildMemberContainer::iterator cit = m_member.find(pid);
  396. if (cit == m_member.end())
  397. return;
  398. for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it!= m_memberOnline.end(); ++it)
  399. {
  400. LPDESC d = (*it)->GetDesc();
  401. if (!d)
  402. continue;
  403. TEMP_BUFFER buf;
  404. buf.write(&pack, sizeof(pack));
  405. cit->second._dummy = 1;
  406. mbData.byNameFlag = 1;
  407. mbData.byGrade = cit->second.grade;
  408. mbData.byIsGeneral = cit->second.is_general;
  409. mbData.byJob = cit->second.job;
  410. mbData.byLevel = cit->second.level;
  411. mbData.dwOffer = cit->second.offer_exp;
  412. mbData.pid = cit->second.pid;
  413. //buf.write(&(cit->second), sizeof(DWORD) * 3 +1);
  414. buf.write(&mbData, sizeof(TGuildMemberPacketData));
  415. buf.write(cit->second.name.c_str(), cit->second.name.length());
  416. buf.write(c, CHARACTER_NAME_MAX_LEN + 1 - cit->second.name.length());
  417. d->Packet(buf.read_peek(), buf.size());
  418. }
  419. }
  420. Aratılır,
  421. SGuildMember::SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, BYTE level, DWORD offer_exp, char* name)
  422. Değiştirilir,
  423. SGuildMember::SGuildMember(DWORD pid, BYTE grade, BYTE is_general, BYTE job, int level, DWORD offer_exp, char* name)
  424. SOURCE KLASÖRÜNÜZÜN İÇERİSİNDE BULUNAN common dosyasına giriyoruz.
  425. tables.h
  426. Aratılır,
  427. BYTE byLevel;
  428. Değiştirilir,
  429. int byLevel;
  430. Aratılır,
  431. BYTE level;
  432. Değiştirilir,
  433. int level;
  434. Aratılır,
  435. BYTE level;
  436. Değiştirilir,
  437. int level;
  438. Aratılır,
  439. BYTE bLevel;
  440. (SPacketPartySetMemberLevel'ın altında)
  441. Değiştirilir,
  442. int bLevel;
  443. Aratılır,
  444. BYTE bLevel;
  445. (typedef struct SPacketDGGuildMember'ın altında)
  446. Değiştirilir,
  447. int bLevel;
  448. lenght.h
  449. Şimdi max level sınırını seçiyoruz, aşağıdaki kısmı aratın ve 120'leri max level sınırını kaç istiyorsanız ona göre değiştirip,kaydedin.
  450. PLAYER_EXP_TABLE_MAX = 120,
  451. PLAYER_MAX_LEVEL_CONST = 120,
  452. COMMON İLE İŞİMİZ BİTTİ. ŞİMDİ SOURCE KLASÖRÜMÜZDEN DB'YE ORADAN SRC'YE GİRİYORUZ. (DB/SRC)
  453. ClientManager.h
  454. Aratılır,
  455. struct TPartyInfo
  456. {
  457. BYTE bRole;
  458. BYTE bLevel;
  459. Değiştirilir,
  460. struct TPartyInfo
  461. {
  462. BYTE bRole;
  463. int bLevel;
  464. ClientManagerPlayer.cpp
  465. Aratılır,
  466. "PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d"
  467. Değiştirilir,
  468. "PLAYER_DELETE FAILED LEVEL %d >= DELETE LIMIT %d"
  469. Aratılır, ( 2 tane bulacaksınız, biraz altında bir tane daha var ikisini de değiştirin)
  470. "PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d"
  471. Değiştirilir,
  472. "PLAYER_DELETE FAILED LEVEL %d >= DELETE LIMIT %d"
  473. DB İLE İŞİMİZ BİTTİ SIRA CLİENT'DA (client)
  474. packet.h
  475. Aratılır,
  476. BYTE byLevel;
  477. Değiştirilir,
  478. int byLevel;
  479. Aratılır,
  480. BYTE byLevel;
  481. Değiştirilir,
  482. int byLevel;
  483. PythonGuild.h
  484. Aratılır,
  485. BYTE byLevel;
  486. Değiştirilir,
  487. int byLevel;
  488. NOT : Son olarak player databasesindeki player bölümünden level sütununu düzenleyin.
  489. Set its type from tinyint to smallint (or int, it depends how high is the maximum level) and expand its size to 3 (or higher).
  490. Yukarıyı @;Vectors'e bırakıyorum.