viewing paste Unknown #6149 | Diff

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
Index: src/char/int_party.c
===================================================================
--- src/char/int_party.c        (revision 17356)
+++ src/char/int_party.c        (working copy)
@@ -740,7 +740,25 @@
        return 1;
 }
 
+int mapif_parse_PartyShareLevel(int fd,unsigned int share_lvl)
+{
+       struct party_data *p;
+       DBIterator* iter = db_iterator(party_db_);
 
+       party_share_level = share_lvl;
+
+       for(p = dbi_first(iter); dbi_exists(iter); p = dbi_next(iter)) { //Update online parties
+               if(p->party.count > 1)
+                       int_party_calc_state(p);
+               else if(!p->party.count) //Remove parties from memory that have no players online
+                       idb_remove(party_db_, p->party.party_id);
+       }
+       dbi_destroy(iter);
+
+       return 1;
+}
+
+
 // Communication from the map server
 //-Analysis that only one packet
 // Data packet length is set to inter.c that you
@@ -761,6 +779,7 @@
        case 0x3026: mapif_parse_BreakParty(fd, RFIFOL(fd,2)); break;
        case 0x3027: mapif_parse_PartyMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), (char*)RFIFOP(fd,12), RFIFOW(fd,2)-12); break;
        case 0x3029: mapif_parse_PartyLeaderChange(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
+       case 0x302A: mapif_parse_PartyShareLevel(fd, RFIFOL(fd,2)); break;
        default:
                return 0;
        }
Index: src/char/inter.c
===================================================================
--- src/char/inter.c    (revision 17356)
+++ src/char/inter.c    (working copy)
@@ -48,7 +48,7 @@
 int inter_recv_packet_length[] = {
        -1,-1, 7,-1, -1,13,36, (2 + 4 + 4 + 4 + NAME_LENGTH),  0, 0, 0, 0,  0, 0,  0, 0,        // 3000-
         6,-1, 0, 0,  0, 0, 0, 0, 10,-1, 0, 0,  0, 0,  0, 0,    // 3010-
-       -1,10,-1,14, 14,19, 6,-1, 14,14, 0, 0,  0, 0,  0, 0,    // 3020- Party
+       -1,10,-1,14, 14,19, 6,-1, 14,14, 6, 0,  0, 0,  0, 0,    // 3020- Party
        -1, 6,-1,-1, 55,19, 6,-1, 14,-1,-1,-1, 18,19,186,-1,    // 3030-
        -1, 9, 0, 0,  0, 0, 0, 0,  7, 6,10,10, 10,-1,  0, 0,    // 3040-
        -1,-1,10,10,  0,-1,12, 0,  0, 0, 0, 0,  0, 0,  0, 0,    // 3050-  Auction System [Zephyrus]
Index: src/map/atcommand.c
===================================================================
--- src/map/atcommand.c (revision 17356)
+++ src/map/atcommand.c (working copy)
@@ -3729,7 +3729,30 @@
 
        return 0;
 }
+/*==========================================
+ * @mapinfo <share_range> [Akinari]
+ * Updates char server party share level in runtime
+ * Temporary - Permanent update in inter_athena.conf
+ *------------------------------------------*/
+ACMD_FUNC(partysharelvl) {
+       unsigned int share_lvl;
 
+       nullpo_retr(-1, sd);
+
+       if(!message || !*message) {
+               clif_displaymessage(fd, msg_txt(sd,1322));
+               return -1;
+       } else
+               share_lvl = min(atof(message),pc_maxbaselv(sd));
+
+       if(intif_party_sharelvlupdate(share_lvl)) //Successfully updated
+               clif_displaymessage(fd, msg_txt(sd,1478));
+       else //Char server offline
+               clif_displaymessage(fd, msg_txt(sd,1479));
+
+       return 0;
+}
+
 /*==========================================
  * @mapinfo [0-3] <map name> by MC_Cameri
  * => Shows information about the map [map name]
@@ -9105,6 +9128,7 @@
                ACMD_DEF2("reloadquestdb", reload),
                ACMD_DEF2("reloadmsgconf", reload),
                ACMD_DEF2("reloadpacketdb", reload),
+               ACMD_DEF(partysharelvl),
                ACMD_DEF(mapinfo),
                ACMD_DEF(dye),
                ACMD_DEF2("hairstyle", hair_style),
Index: src/map/intif.c
===================================================================
--- src/map/intif.c     (revision 17356)
+++ src/map/intif.c     (working copy)
@@ -529,6 +529,18 @@
        return 0;
 }
 
+// Request to update party share level
+int intif_party_sharelvlupdate(unsigned int share_lvl)
+{
+       if (CheckForCharServer())
+               return 0;
+       WFIFOHEAD(inter_fd,6);
+       WFIFOW(inter_fd,0)=0x302A;
+       WFIFOL(inter_fd,2)=share_lvl;
+       WFIFOSET(inter_fd,6);
+       return 1;
+}
+
 // Request a Guild creation
 int intif_guild_create(const char *name,const struct guild_member *master)
 {
@@ -2266,9 +2278,6 @@
        case 0x3854:    intif_parse_Auction_message(fd); break;
        case 0x3855:    intif_parse_Auction_bid(fd); break;
 
-//Bound items
-       case 0x3856:    intif_parse_itembound_ack(fd); break;
-
        // Mercenary System
        case 0x3870:    intif_parse_mercenary_received(fd); break;
        case 0x3871:    intif_parse_mercenary_deleted(fd); break;
@@ -2286,6 +2295,9 @@
        case 0x3891:    intif_parse_RecvHomunculusData(fd); break;
        case 0x3892:    intif_parse_SaveHomunculusOk(fd); break;
        case 0x3893:    intif_parse_DeleteHomunculusOk(fd); break;
+//Bound items
+       case 0x3856:    intif_parse_itembound_ack(fd); break;
+
        default:
                ShowError("intif_parse : unknown packet %d %x\n",fd,RFIFOW(fd,0));
                return 0;
Index: src/map/intif.h
===================================================================
--- src/map/intif.h     (revision 17356)
+++ src/map/intif.h     (working copy)
@@ -41,6 +41,7 @@
 int intif_break_party(int party_id);
 int intif_party_message(int party_id, int account_id, const char *mes,int len);
 int intif_party_leaderchange(int party_id,int account_id,int char_id);
+int intif_party_sharelvlupdate(unsigned int share_lvl);
 
 
 int intif_guild_create(const char *name, const struct guild_member *master);
Viewed 331 times, submitted by unknown.