Перейти к содержанию

Запрет вещей на карте


Fox RM

Рекомендуемые сообщения

Где mapflag noequip просто блокирует текущий эквип

99 - раздевает чара и блокирует эквип

1-10 снимает вещь из указанных слотов блокирует весь эквип (слоты считал сверху вниз, слева направо)

Index: map/clif.c
===================================================================
--- map/clif.c (revision 13936)
+++ map/clif.c (working copy)
@@ -8088,6 +8088,35 @@
clif_mercenary_skillblock(sd);
}

+ if(map[sd->bl.m].flag.noequip) {
+ if( map[sd->bl.m].flag.noequip == 1 && sd->equip_index[EQI_HEAD_TOP] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_HEAD_TOP],1);
+ if( map[sd->bl.m].flag.noequip == 2 && sd->equip_index[EQI_HEAD_MID] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_HEAD_MID],1);
+ if( map[sd->bl.m].flag.noequip == 3 && sd->equip_index[EQI_HEAD_LOW] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_HEAD_LOW],1);
+ if( map[sd->bl.m].flag.noequip == 4 && sd->equip_index[EQI_ARMOR] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_ARMOR],1);
+ if( map[sd->bl.m].flag.noequip == 5 && sd->equip_index[EQI_HAND_R] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_HAND_R],1);
+ if( map[sd->bl.m].flag.noequip == 6 && sd->equip_index[EQI_HAND_L] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_HAND_L],1);
+ if( map[sd->bl.m].flag.noequip == 7 && sd->equip_index[EQI_GARMENT] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_GARMENT],1);
+ if( map[sd->bl.m].flag.noequip == 8 && sd->equip_index[EQI_SHOES] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_SHOES],1);
+ if( map[sd->bl.m].flag.noequip == 9 && sd->equip_index[EQI_ACC_R] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_ACC_R],1);
+ if( map[sd->bl.m].flag.noequip == 10 && sd->equip_index[EQI_ACC_L] >= 0 )
+ pc_unequipitem(sd,sd->equip_index[EQI_ACC_L],1);
+ if( map[sd->bl.m].flag.noequip == 99 ) {
+ int i;
+ for(i=0;i<11;i++)
+ if(sd->equip_index[i] >= 0)
+ pc_unequipitem(sd,sd->equip_index[i],1);
+ }
+ }
+
if(sd->state.connect_new) {
int lv;
sd->state.connect_new = 0;
@@ -8970,6 +8999,10 @@
clif_clearunit_area(&sd->bl,1);
return;
}
+
+ if (map[sd->bl.m].flag.noequip)
+ return;
+
index = RFIFOW(fd,2)-2;
if (index < 0 || index >= MAX_INVENTORY)
return; //Out of bounds check.
@@ -9014,6 +9047,9 @@
return;
}

+ if (map[sd->bl.m].flag.noequip)
+ return;
+
if (sd->state.storage_flag)
; //You can equip/unequip stuff while storage is open.
else if (pc_cant_act(sd))
Index: map/map.h
===================================================================
--- map/map.h (revision 13936)
+++ map/map.h (working copy)
@@ -463,6 +463,7 @@
unsigned nochat :1;
unsigned partylock :1;
unsigned guildlock :1;
+ unsigned noequip :12;
} flag;
struct point save;
struct npc_data *npc[MAX_NPC_PER_MAP];
Index: map/npc.c
===================================================================
--- map/npc.c (revision 13936)
+++ map/npc.c (working copy)
@@ -2897,6 +2897,17 @@
map[m].flag.partylock=state;
else if (!strcmpi(w3,"guildlock"))
map[m].flag.guildlock=state;
+ else if (!strcmpi(w3,"noequip")) {
+ if( state )
+ {
+ if( sscanf(w4, "%d", &state) == 1 )
+ map[m].flag.noequip = state;
+ else
+ map[m].flag.noequip = 100;
+ }
+ else
+ map[m].flag.noequip = 0;
+ }
else
ShowError("npc_parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').\n", w3, filepath, strline(buffer,start-buffer));

  • Upvote 5
Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...
  • 4 недели спустя...
×
×
  • Создать...
Яндекс.Метрика