Guest User

guild.cpp

a guest
Jul 9th, 2015
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.67 KB | None | 0 0
  1. void CGuild::SendListOneToAll(DWORD pid)
  2. {
  3.  
  4.     TPacketGCGuild pack;
  5.     pack.header = HEADER_GC_GUILD;
  6.     pack.size = sizeof(TPacketGCGuild);
  7.     pack.subheader = GUILD_SUBHEADER_GC_LIST;
  8.  
  9.     pack.size += sizeof(TGuildMemberPacketData);
  10.  
  11.     pack.size += CHARACTER_NAME_MAX_LEN + 1;
  12.  
  13.     char c[CHARACTER_NAME_MAX_LEN+1];
  14.     memset(c, 0, sizeof(c));
  15.  
  16.     TGuildMemberContainer::iterator cit = m_member.find(pid);
  17.     if (cit == m_member.end())
  18.         return;
  19.  
  20.     for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it!= m_memberOnline.end(); ++it)
  21.     {
  22.         LPDESC d = (*it)->GetDesc();
  23.         if (!d)
  24.             continue;
  25.  
  26.         TGuildMemberPacketData mbData;
  27.  
  28.         mbData.grade = cit->second.grade;
  29.         mbData.is_general = cit->second.is_general;
  30.         mbData.job = cit->second.job;
  31.         mbData.level = cit->second.level;
  32.         mbData.offer = cit->second.offer_exp;
  33.         mbData.pid = cit->second.pid;
  34.         mbData.name_flag = 1;
  35.  
  36.         TEMP_BUFFER buf;
  37.  
  38.         buf.write(&pack, sizeof(pack));
  39.  
  40.         cit->second._dummy = 1;
  41.  
  42.         buf.write(&mbData, sizeof(mbData));
  43.         buf.write(cit->second.name.c_str(), cit->second.name.length());
  44.         if (CHARACTER_NAME_MAX_LEN + 1 - cit->second.name.length() > 0)
  45.             buf.write(c, CHARACTER_NAME_MAX_LEN + 1 - cit->second.name.length());
  46.         d->Packet(buf.read_peek(), buf.size());
  47.     }
  48. }
  49.  
  50. void CGuild::SendListPacket(LPCHARACTER ch)
  51. {
  52.     /*
  53.        List Packet
  54.  
  55.        Header
  56.        Count (byte)
  57.        [
  58.        ...
  59.        name_flag 1 - Ŕ̸§Ŕ» ş¸ł»´ŔłÄ ľČş¸ł»´ŔłÄ
  60.        name CHARACTER_NAME_MAX_LEN+1
  61.        ] * Count
  62.  
  63.      */
  64.     LPDESC d;
  65.     if (!(d=ch->GetDesc()))
  66.         return;
  67.  
  68.     TPacketGCGuild pack;
  69.     pack.header = HEADER_GC_GUILD;
  70.     pack.size = sizeof(TPacketGCGuild);
  71.     pack.subheader = GUILD_SUBHEADER_GC_LIST;
  72.  
  73.     pack.size += sizeof(TGuildMemberPacketData) * m_member.size();
  74.  
  75.     pack.size += (CHARACTER_NAME_MAX_LEN + 1) * m_member.size();
  76.  
  77.     TEMP_BUFFER buf;
  78.  
  79.     buf.write(&pack,sizeof(pack));
  80.  
  81.     char c[CHARACTER_NAME_MAX_LEN+1];
  82.     memset(c, 0, sizeof(c));
  83.  
  84.     for (TGuildMemberContainer::iterator it = m_member.begin(); it != m_member.end(); ++it)
  85.     {
  86.  
  87.         TGuildMemberPacketData mbData;
  88.  
  89.         mbData.grade = it->second.grade;
  90.         mbData.is_general = it->second.is_general;
  91.         mbData.job = it->second.job;
  92.         mbData.level = it->second.level;
  93.         mbData.offer = it->second.offer_exp;
  94.         mbData.pid = it->second.pid;
  95.         mbData.name_flag = 1;
  96.         it->second._dummy = 1;
  97.  
  98.         buf.write(&mbData, sizeof(mbData));
  99.  
  100.         buf.write(it->second.name.c_str(), it->second.name.length());
  101.         if (CHARACTER_NAME_MAX_LEN + 1 - it->second.name.length() > 0)
  102.             buf.write(c, CHARACTER_NAME_MAX_LEN + 1 - it->second.name.length());
  103.  
  104.         if ( test_server )
  105.             sys_log(0 ,"name %s job %d  ", it->second.name.c_str(), it->second.job );
  106.     }
  107.  
  108.     d->Packet(buf.read_peek(), buf.size());
  109.  
  110.     for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
  111.     {
  112.         SendLoginPacket(ch, *it);
  113.     }
  114.  
  115.     for (TGuildMemberP2POnlineContainer::iterator it = m_memberP2POnline.begin(); it != m_memberP2POnline.end(); ++it)
  116.     {
  117.         SendLoginPacket(ch, *it);
  118.     }
  119.  
  120. }
  121.  
  122. bool CGuild::OfferExp(LPCHARACTER ch, int amount)
  123. {
  124.     TGuildMemberContainer::iterator cit = m_member.find(ch->GetPlayerID());
  125.  
  126.     if (cit == m_member.end())
  127.         return false;
  128.  
  129.     if (m_data.exp+amount < m_data.exp)
  130.         return false;
  131.  
  132.     if (amount < 0)
  133.         return false;
  134.  
  135.     if (ch->GetExp() < (DWORD) amount)
  136.     {
  137.         ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<±ćµĺ> Á¦°řÇϰíŔÚ ÇĎ´Â °ćÇčġ°ˇ ł˛Ŕş °ćÇčġş¸´Ů ¸ą˝Ŕ´Ď´Ů."));
  138.         return false;
  139.     }
  140.  
  141.     if (ch->GetExp() - (DWORD) amount > ch->GetExp())
  142.     {
  143.         sys_err("Wrong guild offer amount %d by %s[%u]", amount, ch->GetName(), ch->GetPlayerID());
  144.         return false;
  145.     }
  146.  
  147.     ch->PointChange(POINT_EXP, -amount);
  148.  
  149.     TPacketGuildExpUpdate guild_exp;
  150.     guild_exp.guild_id = GetID();
  151.     guild_exp.amount = amount / 100;
  152.     db_clientdesc->DBPacket(HEADER_GD_GUILD_EXP_UPDATE, 0, &guild_exp, sizeof(guild_exp));
  153.     GuildPointChange(POINT_EXP, amount / 100, true);
  154.  
  155.     cit->second.offer_exp += amount / 100;
  156.     cit->second._dummy = 0;
  157.  
  158.     TPacketGCGuild pack;
  159.     pack.header = HEADER_GC_GUILD;
  160.     pack.subheader = GUILD_SUBHEADER_GC_LIST;
  161.     pack.size = sizeof(TPacketGCGuild) + sizeof(TGuildMemberPacketData);
  162.  
  163.     for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
  164.     {
  165.         LPDESC d = (*it)->GetDesc();
  166.         if (d)
  167.         {
  168.             TEMP_BUFFER buf;
  169.  
  170.             TGuildMemberPacketData mbData;
  171.  
  172.             mbData.grade = cit->second.grade;
  173.             mbData.is_general = cit->second.is_general;
  174.             mbData.job = cit->second.job;
  175.             mbData.level = cit->second.level;
  176.             mbData.offer = cit->second.offer_exp;
  177.             mbData.pid = cit->second.pid;
  178.             mbData.name_flag = 0;
  179.  
  180.             buf.write(&pack, sizeof(pack));
  181.             buf.write(&mbData, sizeof(mbData));
  182.            
  183.             //d->BufferedPacket(&pack, sizeof(pack));
  184.             d->Packet(buf.read_peek(), buf.size());
  185.         }
  186.     }
  187.  
  188.     SaveMember(ch->GetPlayerID());
  189.  
  190.     TPacketGuildChangeMemberData gd_guild;
  191.  
  192.     gd_guild.guild_id = GetID();
  193.     gd_guild.pid = ch->GetPlayerID();
  194.     gd_guild.offer = cit->second.offer_exp;
  195.     gd_guild.level = ch->GetLevel();
  196.     gd_guild.grade = cit->second.grade;
  197.  
  198.     db_clientdesc->DBPacket(HEADER_GD_GUILD_CHANGE_MEMBER_DATA, 0, &gd_guild, sizeof(gd_guild));
  199.     return true;
  200. }
  201.  
  202. void CGuild::LevelChange(DWORD pid, int level)
  203. {
  204.     TGuildMemberContainer::iterator cit = m_member.find(pid);
  205.  
  206.     if (cit == m_member.end())
  207.         return;
  208.  
  209.     cit->second.level = level;
  210.  
  211.     TPacketGuildChangeMemberData gd_guild;
  212.  
  213.     gd_guild.guild_id = GetID();
  214.     gd_guild.pid = pid;
  215.     gd_guild.offer = cit->second.offer_exp;
  216.     gd_guild.grade = cit->second.grade;
  217.     gd_guild.level = level;
  218.  
  219.     db_clientdesc->DBPacket(HEADER_GD_GUILD_CHANGE_MEMBER_DATA, 0, &gd_guild, sizeof(gd_guild));
  220.  
  221.     TPacketGCGuild pack;
  222.     pack.header = HEADER_GC_GUILD;
  223.     pack.subheader = GUILD_SUBHEADER_GC_LIST;
  224.     pack.size = sizeof(TPacketGCGuild) + sizeof(TGuildMemberPacketData);
  225.     cit->second._dummy = 0;
  226.  
  227.     for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
  228.     {
  229.         LPDESC d = (*it)->GetDesc();
  230.  
  231.         if (d)
  232.         {
  233.             TEMP_BUFFER buf;
  234.  
  235.             TGuildMemberPacketData mbData;
  236.  
  237.             mbData.grade = cit->second.grade;
  238.             mbData.is_general = cit->second.is_general;
  239.             mbData.job = cit->second.job;
  240.             mbData.level = cit->second.level;
  241.             mbData.offer = cit->second.offer_exp;
  242.             mbData.pid = cit->second.pid;
  243.             mbData.name_flag = 0;
  244.  
  245.             buf.write(&pack, sizeof(pack));
  246.             buf.write(&mbData, sizeof(mbData));
  247.  
  248.             //d->BufferedPacket(&pack, sizeof(pack));
  249.             d->Packet(buf.read_peek(), buf.size());
  250.         }
  251.     }
  252. }
  253.  
  254. void CGuild::ChangeMemberData(DWORD pid, DWORD offer, int level, BYTE grade)
  255. {
  256.     TGuildMemberContainer::iterator cit = m_member.find(pid);
  257.  
  258.     if (cit == m_member.end())
  259.         return;
  260.  
  261.     cit->second.offer_exp = offer;
  262.     cit->second.level = level;
  263.     cit->second.grade = grade;
  264.     cit->second._dummy = 0;
  265.  
  266.     TPacketGCGuild pack;
  267.     memset(&pack, 0, sizeof(pack));
  268.     pack.header = HEADER_GC_GUILD;
  269.     pack.subheader = GUILD_SUBHEADER_GC_LIST;
  270.     pack.size = sizeof(TPacketGCGuild) + sizeof(TGuildMemberPacketData);
  271.  
  272.     for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it)
  273.     {
  274.         LPDESC d = (*it)->GetDesc();
  275.         if (d)
  276.         {
  277.            
  278.             TEMP_BUFFER buf;
  279.  
  280.             TGuildMemberPacketData mbData;
  281.  
  282.             mbData.grade = cit->second.grade;
  283.             mbData.is_general = cit->second.is_general;
  284.             mbData.job = cit->second.job;
  285.             mbData.level = cit->second.level;
  286.             mbData.offer = cit->second.offer_exp;
  287.             mbData.pid = cit->second.pid;
  288.             mbData.name_flag = 0;
  289.  
  290.             buf.write(&pack, sizeof(pack));
  291.             buf.write(&mbData, sizeof(mbData));
  292.  
  293.             //d->BufferedPacket(&pack, sizeof(pack));
  294.             d->Packet(buf.read_peek(), buf.size());
  295.         }
  296.     }
  297. }
Advertisement
Add Comment
Please, Sign In to add comment