viewing paste Rental_Mounts | Athena

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 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
Index: db/const.txt
===================================================================
--- db/const.txt        (revision 678)
+++ db/const.txt        (working copy)
@@ -1224,6 +1224,7 @@
 SC_TIDAL_WEAPON_OPTION         764
 SC_ROCK_CRUSHER                        765
 SC_ROCK_CRUSHER_ATK            766
+SC_ALL_RIDING                  767
 
 e_gasp 0
 e_what 1
Index: db/item_db2.txt
===================================================================
--- db/item_db2.txt     (revision 678)
+++ db/item_db2.txt     (working copy)
@@ -408,6 +408,9 @@
 //6377,Buy_Stall_Permit,Buy Stall Permit,3,200,,10,,,,,,,,,,,,,{},{},{}
 //12548,Buy_Shabby_Stall_Permit,Buy Shabby Stall Permit,11,500,,10,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "ALL_BUYING_STORE",1; },{},{}
 
+
+// Reins
+12622,Reins_Of_Mounts,Reins Of Mounts,2,500,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_ALL_RIDING,-1,1; },{},{}
 // Kagerou/Oboro Exclusive Equips
 13075,Kurenai,Kurenai,4,5000,,700,130,,1,0,0x20000000,7,2,2,3,99,1,1,{ bonus bInt,3; },{},{}
 13076,Nachal_Sword,Nachal Sword,4,40000,,600,120,,1,1,0x20000000,7,2,2,3,110,1,1,{ bonus bInt,3; },{},{}
Index: src/map/clif.c
===================================================================
--- src/map/clif.c      (revision 678)
+++ src/map/clif.c      (working copy)
@@ -1194,6 +1194,8 @@
                                clif_sendbgemblem_area(sd);
                        if( sd->sc.count && sd->sc.data[SC_BANDING] )
                                clif_status_change(&sd->bl,SI_BANDING,1,9999,sd->sc.data[SC_BANDING]->val1,0,0);
+                       if( sd->sc.count && sd->sc.data[SC_ALL_RIDING] )
+                               clif_status_change(&sd->bl,SI_ALL_RIDING,1,9999,sd->sc.data[SC_ALL_RIDING]->val1,sd->sc.data[SC_ALL_RIDING]->val2,0);
                }
                break;
        case BL_MOB:
@@ -3931,7 +3933,9 @@
                        if( tsd->state.bg_id && map[tsd->bl.m].flag.battleground )
                                clif_sendbgemblem_single(sd->fd,tsd);
                        if( tsd->sc.count && tsd->sc.data[SC_BANDING] )
-                               clif_display_banding(&sd->bl,&tsd->bl,tsd->sc.data[SC_BANDING]->val1);
+                               clif_status_change_single(&sd->bl,&tsd->bl,SI_BANDING,1,9999,tsd->sc.data[SC_BANDING]->val1,tsd->sc.data[SC_BANDING]->val2,tsd->sc.data[SC_BANDING]->val3);
+                       if( tsd->sc.count && tsd->sc.data[SC_ALL_RIDING] )
+                               clif_status_change_single(&sd->bl,&tsd->bl,SI_ALL_RIDING,1,9999,tsd->sc.data[SC_ALL_RIDING]->val1,tsd->sc.data[SC_ALL_RIDING]->val2,0);
                }
                break;
        case BL_MER: // Devotion Effects
@@ -5252,29 +5256,30 @@
 
 
 /*==========================================
- * Display Banding when someone under this
- * status change walk into your view range.
+ * Display a status change when someone
+ * under this status change walk into your
+ * view range.
  *------------------------------------------*/
-void clif_display_banding(struct block_list *dst, struct block_list *bl, int val1)
+void clif_status_change_single(struct block_list *dst, struct block_list *bl, int type, int flag, unsigned int tick, int val1, int val2, int val3)
 {
        unsigned char buf[32];
 
        nullpo_retv(bl);
        nullpo_retv(dst);
 
-       if( battle_config.display_status_timers )
+       if( flag && battle_config.display_status_timers )
                WBUFW(buf, 0) = 0x043f;
        else
                WBUFW(buf, 0)= 0x0196;
-       WBUFW(buf, 2) = SI_BANDING;
+       WBUFW(buf, 2) = type;
        WBUFL(buf, 4) = bl->id;
-       WBUFB(buf, 8) = 1;
-       if( battle_config.display_status_timers )
+       WBUFB(buf, 8) = flag;
+       if( flag && battle_config.display_status_timers )
        {
-               WBUFL(buf, 9) = 0;
+               WBUFL(buf, 9) = tick;
                WBUFL(buf,13) = val1;
-               WBUFL(buf,17) = 0;
-               WBUFL(buf,21) = 0;
+               WBUFL(buf,17) = val2;
+               WBUFL(buf,21) = val3;
        }
        clif_send(buf,packet_len(WBUFW(buf,0)),dst,SELF);
 }
@@ -9495,6 +9500,9 @@
                        (sd->sc.data[SC_VOICEOFSIREN] && sd->sc.data[SC_VOICEOFSIREN]->val2 == target_id) )
                        return;
 
+               if( sd->sc.data[SC_ALL_RIDING] )
+                       return;
+
                if (!battle_config.sdelay_attack_enable && pc_checkskill(sd, SA_FREECAST) <= 0) {
                        if (DIFF_TICK(tick, sd->ud.canact_tick) < 0) {
                                clif_skill_fail(sd, 1, 4, 0, 0);
@@ -10427,6 +10435,9 @@
 
        if( sd->sc.data[SC__MANHOLE] )
                return;
+      
+       if( sd->sc.data[SC_ALL_RIDING] )
+               return;
 
        if( sd->menuskill_id )
        {
@@ -10595,6 +10606,9 @@
        if( sd->sc.data[SC__MANHOLE] )
                return;
 
+       if( sd->sc.data[SC_ALL_RIDING] )
+               return;
+
        if( pc_cant_act(sd) )
        {
                sd->menuskill_id = sd->menuskill_val = 0;
Index: src/map/clif.h
===================================================================
--- src/map/clif.h      (revision 678)
+++ src/map/clif.h      (working copy)
@@ -637,7 +637,7 @@
 
 void clif_equip_damaged(struct map_session_data *sd, int equip_index);
 void clif_millenniumshield(struct map_session_data *sd, short shields );
-void clif_display_banding(struct block_list *dst, struct block_list *bl, int val1);
+void clif_status_change_single(struct block_list *dst, struct block_list *bl, int type, int flag, unsigned int tick, int val1, int val2, int val3);
 
 // Elementals
 void clif_elemental_info(struct map_session_data *sd);
Index: src/map/itemdb.h
===================================================================
--- src/map/itemdb.h    (revision 678)
+++ src/map/itemdb.h    (working copy)
@@ -28,6 +28,7 @@
 #define ITEMID_MAKEUPBRUSH 6121
 #define ITEMID_PAINTBRUSH 6122
 #define ITEMID_SURFACEPAINTS 6123
+#define ITEMID_REINS 12622
 
 //The only item group required by the code to be known. See const.txt for the full list.
 #define IG_FINDINGORE 6
Index: src/map/pc.c
===================================================================
--- src/map/pc.c        (revision 678)
+++ src/map/pc.c        (working copy)
@@ -559,7 +559,9 @@
                if( sd->status.inventory[i].expire_time <= time(NULL) )
                {
                        clif_rental_expired(sd->fd, sd->status.inventory[i].nameid);
-                       pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0);
+                       if( sd->status.inventory[i].nameid == ITEMID_REINS )
+                               status_change_end(&sd->bl, SC_ALL_RIDING, -1);
+                       pc_delitem(sd, i, sd->status.inventory[i].amount, 1, 0);
                }
                else
                {
@@ -4083,8 +4085,8 @@
                clif_useitemack(sd,n,amount,1);
        else
        {
-               if( sd->status.inventory[n].expire_time == 0 )
-               {
+               if( sd->status.inventory[n].expire_time == 0 && nameid != ITEMID_REINS )
+               {       // Don't remove Reins.
                        clif_useitemack(sd,n,amount-1,1);
 
                        //Logs (C)onsumable items [Lupus]
@@ -7166,6 +7168,9 @@
        nullpo_ret(sd);
        p_type = sd->sc.option;
 
+       if( (p_type&(OPTION_RIDING|OPTION_RIDING_DRAGON|OPTION_RIDING_WUG|OPTION_MADO)) && sd->sc.data[SC_ALL_RIDING] )
+               return 0;       // Already mounted.
+
        if( p_type&OPTION_MADO && p_type&OPTION_CART) // Don't remove cart when you're removing your mado.
                type |= (p_type&OPTION_CART);
 
Index: src/map/status.c
===================================================================
--- src/map/status.c    (revision 678)
+++ src/map/status.c    (working copy)
@@ -766,6 +766,8 @@
        StatusIconChangeTable[SC_CURSED_SOIL] = SI_CURSED_SOIL;
        StatusIconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL;
 
+       StatusIconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING;
+
        //Other SC which are not necessarily associated to skills.
        StatusChangeFlagTable[SC_ASPDPOTION0] = SCB_ASPD;
        StatusChangeFlagTable[SC_ASPDPOTION1] = SCB_ASPD;
@@ -860,6 +862,8 @@
        StatusChangeFlagTable[SC_VITATA_500] |= SCB_REGEN;
        StatusChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD;
 
+       StatusChangeFlagTable[SC_ALL_RIDING] |= SCB_SPEED;
+
        if( !battle_config.display_hallucination ) //Disable Hallucination.
                StatusIconChangeTable[SC_HALLUCINATION] = SI_BLANK;
 }
@@ -4744,6 +4748,8 @@
                                val = max( val, sc->data[SC_GT_REVITALIZE]->val2 );
                        if( sc->data[SC_WIND_STEP_OPTION] )
                                val = max( val, sc->data[SC_WIND_STEP_OPTION]->val2 );
+                       if( sc->data[SC_ALL_RIDING] )
+                               val = max( val, sc->data[SC_ALL_RIDING]->val2 );
 
                        //FIXME: official items use a single bonus for this [ultramage]
                        if( sc->data[SC_SPEEDUP0] ) // temporary item-based speedup
@@ -6406,6 +6412,15 @@
                status_change_end(bl, SC_GT_ENERGYGAIN, INVALID_TIMER);
                status_change_end(bl, SC_GT_CHANGE, INVALID_TIMER);
                break;
+       case SC_ALL_RIDING:
+               if( !sd || pc_isriding(sd,OPTION_RIDING|OPTION_RIDING_DRAGON|OPTION_RIDING_WUG|OPTION_MADO) )
+                       return 0;
+               if( sc->data[type] )
+               {       // Already mounted, just dismount.
+                       status_change_end(bl, SC_ALL_RIDING, -1);
+                       return 0;
+               }
+               break;
        }
 
        //Check for overlapping fails
Index: src/map/status.h
===================================================================
--- src/map/status.h    (revision 678)
+++ src/map/status.h    (working copy)
@@ -577,6 +577,8 @@
 
        SC_JYUMONJIKIRI = 780,
 
+       SC_ALL_RIDING,
+
        SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
 } sc_type;
 
@@ -1196,7 +1198,7 @@
 //     SI_SPIRITS_SAVEINFO2 = 610,
 //     SI_MAGIC_CANDY = 611,
 //     SI_SEARCH_STORE_INFO = 612,
-//     SI_ALL_RIDING = 613,
+       SI_ALL_RIDING = 613,
 //     SI_ALL_RIDING_REUSE_LIMIT = 614,
 //     SI_MACRO = 615,
 //     SI_MACRO_POSTDELAY = 616,
Viewed 548 times, submitted by Lilith.