Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.55 KB | None | 0 0
  1.  
  2. void PVP::UpdateBPDPEXP(rsPLAYINFO *PlayerKill, rsPLAYINFO *PlayerKilled, rsPLAYINFO *rsPlayInfoAll)
  3. {
  4. #ifdef _W_SERVER
  5. PVPInfo PlayerKillInf;
  6. PVPInfo PlayerKilledInf;
  7. HPTSQL* sql = HPTSQL::GetInstance();
  8.  
  9. if (sql->IsConnected())
  10. {
  11. sql->EnterSqlSection();
  12.  
  13. // Inicio Pegar Info Player que matou
  14. char GetInfoPlayerKill[255] = { 0 };
  15. wsprintf(GetInfoPlayerKill, "SELECT * FROM [EPT].[dbo].[PVP] WHERE [NICK]='%s'", PlayerKill->smCharInfo.szName);
  16. if (sql->Execute(GetInfoPlayerKill))
  17. {
  18. if (sql->Fetch())
  19. {
  20. sql->GetDataValue(PVP_BP, &PlayerKillInf.BP);
  21. sql->GetDataValue(PVP_DP, &PlayerKillInf.DP);
  22. sql->GetDataValue(PVP_EXP, &PlayerKillInf.EXP);
  23. }
  24. else
  25. {
  26. char QueryInsetInfo[255] = { 0 };
  27. wsprintf(QueryInsetInfo, "INSERT INTO [EPT].[dbo].[PVP] ([NICK],[BP],[DP],[EXP]) values('%s',0,0,0)", PlayerKill->smCharInfo.szName);
  28. sql->Execute(QueryInsetInfo);
  29. PlayerKillInf.BP = 0;
  30. PlayerKillInf.DP = 0;
  31. PlayerKillInf.EXP = 0;
  32. }
  33. }
  34. // FIM pegar info Player que matou
  35.  
  36.  
  37. // Inicio pegar info player que morreu
  38. char GetInfoPlayerKilledInf[255] = { 0 };
  39. wsprintf(GetInfoPlayerKilledInf, "SELECT * FROM [EPT].[dbo].[PVP] WHERE [NICK]='%s'", PlayerKilled->smCharInfo.szName);
  40. if (sql->Execute(GetInfoPlayerKilledInf))
  41. {
  42. if (sql->Fetch())
  43. {
  44. sql->GetDataValue(PVP_BP, &PlayerKilledInf.BP);
  45. sql->GetDataValue(PVP_DP, &PlayerKilledInf.DP);
  46. sql->GetDataValue(PVP_EXP, &PlayerKilledInf.EXP);
  47. }
  48. else
  49. {
  50. char QueryInsetInfo[255] = { 0 };
  51. wsprintf(QueryInsetInfo, "INSERT INTO [EPT].[dbo].[PVP] ([NICK],[BP],[DP],[EXP]) values('%s',0,0,0)", PlayerKilled->smCharInfo.szName);
  52. sql->Execute(QueryInsetInfo);
  53. PlayerKilledInf.BP = 0;
  54. PlayerKilledInf.DP = 0;
  55. PlayerKilledInf.EXP = 0;
  56. }
  57. }
  58. // fim pegar info player que morreu
  59. sql->LeaveSqlSection();
  60. }
  61.  
  62. if (strcmp(PlayerKill->lpsmSock->szIPAddr, PlayerKilled->lpsmSock->szIPAddr) == 0)
  63. return;
  64.  
  65. int DiferenceLevel = PlayerKilled->smCharInfo.Level - PlayerKill->smCharInfo.Level;
  66. int EXP = 0;
  67. bool PositiveAddExp = FALSE;
  68.  
  69. if (DiferenceLevel >= 30)
  70. {
  71. return;
  72. }
  73. else if (DiferenceLevel >= 25)
  74. {
  75. EXP = 95;
  76. PositiveAddExp = FALSE;
  77. }
  78. else if (DiferenceLevel >= 20)
  79. {
  80. EXP = 85;
  81. PositiveAddExp = FALSE;
  82. }
  83. else if (DiferenceLevel >= 15)
  84. {
  85. EXP = 75;
  86. PositiveAddExp = FALSE;
  87. }
  88. else if (DiferenceLevel >= 10)
  89. {
  90. EXP = 65;
  91. PositiveAddExp = FALSE;
  92. }
  93. else if (DiferenceLevel >= 5)
  94. {
  95. EXP = 55;
  96. PositiveAddExp = FALSE;
  97. }
  98. else if (DiferenceLevel > -5)
  99. {
  100. EXP = 45;
  101. PositiveAddExp = FALSE;
  102. }
  103. else if (DiferenceLevel > -10)
  104. {
  105. EXP = 40;
  106. PositiveAddExp = TRUE;
  107. }
  108. else if (DiferenceLevel > -15)
  109. {
  110. EXP = 35;
  111. PositiveAddExp = TRUE;
  112. }
  113. else if (DiferenceLevel > -20)
  114. {
  115. EXP = 25;
  116. PositiveAddExp = TRUE;
  117. }
  118. else if (DiferenceLevel > -25)
  119. {
  120. EXP = 5;
  121. PositiveAddExp = TRUE;
  122. }
  123. else
  124. {
  125. EXP = 1;
  126. PositiveAddExp = TRUE;
  127. }
  128. // PVPInfo PlayerKillInf;
  129. // PVPInfo PlayerKilledInf;
  130. // (rsPLAYINFO *PlayerKill, rsPLAYINFO *PlayerKilled)
  131. EXP = CalcExp(EXP,PlayerKillInf.EXP >= 0,PlayerKillInf.EXP >= PlayerKillInf.EXP,PositiveAddExp);
  132. int EXPREI;
  133. int DownEXP = 0;
  134.  
  135. if (sql->IsConnected())
  136. {
  137. sql->EnterSqlSection();
  138.  
  139. char UpdateInfKill[255] = { 0 };
  140. wsprintf(UpdateInfKill, "UPDATE [EPT].[dbo].[PVP] SET BP=BP+1,EXP=EXP+%d WHERE [NICK]='%s'", EXP, PlayerKill->smCharInfo.szName);
  141. sql->Execute(UpdateInfKill);
  142.  
  143. char UpdateInfKilled[255] = { 0 };
  144. if (PlayerKilledInf.EXP - EXP < 0)
  145. DownEXP = 0;
  146. else
  147. DownEXP = PlayerKilledInf.EXP - EXP;
  148.  
  149. wsprintf(UpdateInfKilled, "UPDATE [EPT].[dbo].[PVP] SET DP=DP+1,EXP=%d WHERE [NICK]='%s'", DownEXP, PlayerKilled->smCharInfo.szName);
  150. sql->Execute(UpdateInfKilled);
  151.  
  152. char GetReiPVP[255];
  153. wsprintf(GetReiPVP, "SELECT TOP 1 * FROM [EPT].[dbo].[PVP] ORDER BY EXP DESC");
  154. if (sql->Execute(GetReiPVP))
  155. {
  156. if (sql->Fetch())
  157. {
  158. sql->GetDataValue(PVP_EXP, &EXPREI);
  159. }
  160. }
  161.  
  162. sql->LeaveSqlSection();
  163. }
  164.  
  165. // TOTAL
  166.  
  167. PlayerKillInf.BP += 1;
  168. PlayerKillInf.EXP += EXP;
  169.  
  170. smTRANS_PVPINFO smTransPVPINFO;
  171. ZeroMemory(&smTransPVPINFO, sizeof(smTRANS_PVPINFO));
  172. smTransPVPINFO.size = sizeof(smTRANS_PVPINFO);
  173. smTransPVPINFO.code = smTRANSCODE_SENDPVPINFO;
  174. smTransPVPINFO.PVPINFO = PlayerKillInf;
  175.  
  176. if (PlayerKill->lpsmSock)
  177. PlayerKill->lpsmSock->Send2((char *)&smTransPVPINFO, smTransPVPINFO.size, TRUE);
  178.  
  179. PlayerKilledInf.DP += 1;
  180. PlayerKilledInf.EXP = DownEXP;
  181.  
  182. ZeroMemory(&smTransPVPINFO, sizeof(smTRANS_PVPINFO));
  183. smTransPVPINFO.size = sizeof(smTRANS_PVPINFO);
  184. smTransPVPINFO.code = smTRANSCODE_SENDPVPINFO;
  185. smTransPVPINFO.PVPINFO = PlayerKilledInf;
  186.  
  187. if (PlayerKilled->lpsmSock)
  188. PlayerKilled->lpsmSock->Send2((char *)&smTransPVPINFO, smTransPVPINFO.size, TRUE);
  189.  
  190. if (PlayerKillInf.EXP > EXPREI)
  191. {
  192.  
  193. char MSG[255] = { 0 };
  194. wsprintf(MSG, "%s e o novo Rei do PVP", PlayerKill->smCharInfo.szName);
  195. rsSendMessageAll(MSG, 3);
  196. smTRANS_CHAR_COMMAND smTransCharCommand;
  197. smTransCharCommand.size = sizeof(smTRANS_CHAR_COMMAND);
  198. smTransCharCommand.code = smTRANSCODE_REIPVP;
  199. wsprintf(smTransCharCommand.szName, "%s", PlayerKill->smCharInfo.szName);
  200.  
  201.  
  202. for (int cnt = 0; cnt < CONNECTMAX; cnt++)
  203. {
  204. if (rsPlayInfoAll[cnt].lpsmSock)
  205. rsPlayInfoAll[cnt].lpsmSock->Send((char *)&smTransCharCommand, smTransCharCommand.size, TRUE);
  206. }
  207. }
  208.  
  209. #endif
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement