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

[help]Costume


Fox RM

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

Значит , снова же эти костюмы, возникла небольшая проблема. Решил переписать мод, который будет указан ниже, под eAthena, следует заметить что написан он под rAthena. Так вот:


Index: atcommand.c
===================================================================
--- atcommand.c (revision 17306)
+++ atcommand.c (working copy)
@@ -1117,7 +1117,7 @@
ACMD_FUNC(item)
{
char item_name[100];
- int number = 0, item_id, flag = 0;
+ int number = 0, item_id, flag = 0, costume = 0;
struct item item_tmp;
struct item_data *item_data;
int get_count, i;
@@ -1142,7 +1142,27 @@
clif_displaymessage(fd, msg_txt(sd,19)); // Invalid item ID or name.
return -1;
}
-
+
+ if( !strcmpi(command+1,"costumeitem") )
+ {
+ if( !battle_config.reserved_costume_id )
+ {
+ clif_displaymessage(fd, "Costume convertion is disable. Set a value for reserved_cosutme_id on your battle.conf file.");
+ return -1;
+ }
+ if( !(item_data->equip&EQP_HEAD_LOW) &&
+ !(item_data->equip&EQP_HEAD_MID) &&
+ !(item_data->equip&EQP_HEAD_TOP) &&
+ !(item_data->equip&EQP_COSTUME_HEAD_LOW) &&
+ !(item_data->equip&EQP_COSTUME_HEAD_MID) &&
+ !(item_data->equip&EQP_COSTUME_HEAD_TOP) )
+ {
+ clif_displaymessage(fd, "You cannot costume this item. Costume only work for headgears.");
+ return -1;
+ }
+ costume = 1;
+ }
+
item_id = item_data->nameid;
get_count = number;
//Check if it's stackable.
@@ -1155,7 +1175,13 @@
memset(&item_tmp, 0, sizeof(item_tmp));
item_tmp.nameid = item_id;
item_tmp.identify = 1;
-
+ if( costume == 1 )
+ { // Costume Item
+ item_tmp.card[0] = CARD0_CREATE;
+ item_tmp.card[2] = GetWord(battle_config.reserved_costume_id, 0);
+ item_tmp.card[3] = GetWord(battle_config.reserved_costume_id, 1);
+ }
+
if ((flag = pc_additem(sd, &item_tmp, get_count, LOG_TYPE_COMMAND)))
clif_additem(sd, 0, 0, flag);
}
@@ -9251,7 +9277,9 @@
ACMD_DEF(channel),
ACMD_DEF(fontcolor),
ACMD_DEF(langtype),
- ACMD_DEF(reloadmsgconf)
+ ACMD_DEF(reloadmsgconf),
+ ACMD_DEF2("costumeitem", item)
+
};
AtCommandInfo* atcommand;
int i;
Index: battle.c
===================================================================
--- battle.c (revision 17306)
+++ battle.c (working copy)
@@ -5939,6 +5939,7 @@
{ "item_enabled_npc", &battle_config.item_enabled_npc, 1, 0, 1, },
{ "item_flooritem_check", &battle_config.item_onfloor, 1, 0, 1, },
{ "bowling_bash_area", &battle_config.bowling_bash_area, 0, 0, 20, },
+ { "reserved_costume_id", &battle_config.reserved_costume_id, 999998, 0, INT_MAX, },
};
#ifndef STATS_OPT_OUT
/**
Index: battle.h
===================================================================
--- battle.h (revision 17306)
+++ battle.h (working copy)
@@ -488,6 +488,10 @@
int item_enabled_npc;
int item_onfloor; // Whether to drop an undroppable item on the map or destroy it if inventory is full.
int bowling_bash_area;
+
+ // Costume System
+ int reserved_costume_id;
+
} battle_config;

void do_init_battle(void);
Index: map.c
===================================================================
--- map.c (revision 17306)
+++ map.c (working copy)
@@ -1537,7 +1537,13 @@
struct map_session_data* tsd;

nullpo_retv(sd);
-
+
+ if( battle_config.reserved_costume_id && battle_config.reserved_costume_id == charid )
+ {
+ clif_solved_charname(sd->fd, charid, "Costume");
+ return;
+ }
+
tsd = map_charid2sd(charid);
if( tsd )
{
Index: pc.c
===================================================================
--- pc.c (revision 17306)
+++ pc.c (working copy)
@@ -66,8 +66,7 @@
struct fame_list chemist_fame_list[MAX_FAME_LIST];
struct fame_list taekwon_fame_list[MAX_FAME_LIST];

-static unsigned short equip_pos[EQI_MAX]={EQP_ACC_L,EQP_ACC_R,EQP_SHOES,EQP_GARMENT,EQP_HEAD_LOW,EQP_HEAD_MID,EQP_HEAD_TOP,EQP_ARMOR,EQP_HAND_L,EQP_HAND_R,EQP_COSTUME_HEAD_TOP,EQP_COSTUME_HEAD_MID,EQP_COSTUME_HEAD_LOW,EQP_COSTUME_GARMENT,EQP_AMMO};
-
+static unsigned short equip_pos[EQI_MAX]={EQP_ACC_L,EQP_ACC_R,EQP_SHOES,EQP_GARMENT,EQP_HEAD_LOW,EQP_HEAD_MID,EQP_HEAD_TOP,EQP_ARMOR,EQP_HAND_L,EQP_HAND_R,EQP_AMMO,EQP_COSTUME_HEAD_TOP,EQP_COSTUME_HEAD_MID,EQP_COSTUME_HEAD_LOW,EQP_COSTUME_GARMENT};
#define MOTD_LINE_SIZE 128
static char motd_text[MOTD_LINE_SIZE][CHAT_SIZE_MAX]; // Message of the day buffer [Valaris]

@@ -586,7 +585,7 @@

int pc_equippoint(struct map_session_data *sd,int n)
{
- int ep = 0;
+ int ep = 0, char_id = 0;

nullpo_ret(sd);

@@ -604,6 +603,15 @@
(sd->class_&MAPID_UPPERMASK) == MAPID_KAGEROUOBORO))//Kagerou and Oboro can dual wield daggers. [Rytech]
return EQP_ARMS;
}
+
+ if( battle_config.reserved_costume_id &&
+ sd->status.inventory[n].card[0] == CARD0_CREATE &&
+ (char_id = MakeDWord(sd->status.inventory[n].card[2],sd->status.inventory[n].card[3])) == battle_config.reserved_costume_id )
+ { // Costume Item - Converted
+ if( ep&EQP_HEAD_TOP ) { ep &= ~EQP_HEAD_TOP; ep |= EQP_COSTUME_HEAD_TOP; }
+ if( ep&EQP_HEAD_LOW ) { ep &= ~EQP_HEAD_LOW; ep |= EQP_COSTUME_HEAD_LOW; }
+ if( ep&EQP_HEAD_MID ) { ep &= ~EQP_HEAD_MID; ep |= EQP_COSTUME_HEAD_MID; }
+ }
return ep;
}

@@ -1910,8 +1918,8 @@
if( autobonus[i].bonus_script )
{
int j;
- ARR_FIND( 0, EQI_MAX-1, j, sd->equip_index[j] >= 0 && sd->status.inventory[sd->equip_index[j]].equip == autobonus[i].pos );
- if( j < EQI_MAX-1 )
+ ARR_FIND( 0, EQI_MAX_BONUS, j, sd->equip_index[j] >= 0 && sd->status.inventory[sd->equip_index[j]].equip == autobonus[i].pos );
+ if( j < EQI_MAX_BONUS )
script_run_autobonus(autobonus[i].bonus_script,sd->bl.id,sd->equip_index[j]);
}
continue;
@@ -1941,8 +1949,8 @@
if( autobonus->other_script )
{
int j;
- ARR_FIND( 0, EQI_MAX-1, j, sd->equip_index[j] >= 0 && sd->status.inventory[sd->equip_index[j]].equip == autobonus->pos );
- if( j < EQI_MAX-1 )
+ ARR_FIND( 0, EQI_MAX_BONUS, j, sd->equip_index[j] >= 0 && sd->status.inventory[sd->equip_index[j]].equip == autobonus->pos );
+ if( j < EQI_MAX_BONUS )
script_run_autobonus(autobonus->other_script,sd->bl.id,sd->equip_index[j]);
}

Index: pc.h
===================================================================
--- pc.h (revision 17306)
+++ pc.h (working copy)
@@ -37,11 +37,12 @@
EQI_ARMOR,
EQI_HAND_L,
EQI_HAND_R,
+ EQI_AMMO,
+ EQI_MAX_BONUS = 10,
EQI_COSTUME_TOP,
EQI_COSTUME_MID,
EQI_COSTUME_LOW,
EQI_COSTUME_GARMENT,
- EQI_AMMO,
EQI_MAX
};

Index: script.c
===================================================================
--- script.c (revision 17306)
+++ script.c (working copy)
@@ -17596,6 +17596,52 @@
return 0;
}

+/*==========================================
+ * Costume Items
+ *------------------------------------------*/
+BUILDIN_FUNC(costume)
+{
+ int i = -1, num, ep;
+ TBL_PC *sd;
+
+ num = script_getnum(st,2); // Equip Slot
+ sd = script_rid2sd(st);
+
+ if( sd == NULL )
+ return 0;
+ if( num > 0 && num <= ARRAYLENGTH(equip) )
+ i = pc_checkequip(sd, equip[num - 1]);
+ if( i < 0 )
+ return 0;
+
+ ep = sd->status.inventory[i].equip;
+ if( !(ep&EQP_HEAD_LOW) && !(ep&EQP_HEAD_MID) && !(ep&EQP_HEAD_TOP) )
+ return 0;
+
+ log_pick_pc(sd, LOG_TYPE_SCRIPT, -1, &sd->status.inventory[i]);
+ pc_unequipitem(sd,i,2);
+ clif_delitem(sd,i,1,3);
+ // --------------------------------------------------------------------
+ sd->status.inventory[i].refine = 0;
+ sd->status.inventory[i].attribute = 0;
+ sd->status.inventory[i].card[0] = CARD0_CREATE;
+ sd->status.inventory[i].card[1] = 0;
+ sd->status.inventory[i].card[2] = GetWord(battle_config.reserved_costume_id, 0);
+ sd->status.inventory[i].card[3] = GetWord(battle_config.reserved_costume_id, 1);
+
+ if( ep&EQP_HEAD_TOP ) { ep &= ~EQP_HEAD_TOP; ep |= EQP_COSTUME_HEAD_TOP; }
+ if( ep&EQP_HEAD_LOW ) { ep &= ~EQP_HEAD_LOW; ep |= EQP_COSTUME_HEAD_LOW; }
+ if( ep&EQP_HEAD_MID ) { ep &= ~EQP_HEAD_MID; ep |= EQP_COSTUME_HEAD_MID; }
+ // --------------------------------------------------------------------
+ log_pick_pc(sd, LOG_TYPE_SCRIPT, 1, &sd->status.inventory[i]);
+
+ clif_additem(sd,i,1,0);
+ pc_equipitem(sd,i,ep);
+ clif_misceffect(&sd->bl,3);
+
+ return 0;
+}
+
// declarations that were supposed to be exported from npc_chat.c
#ifdef PCRE_SUPPORT
BUILDIN_FUNC(defpattern);
@@ -18060,5 +18106,9 @@
BUILDIN_DEF(checkquest, "i?"),
BUILDIN_DEF(changequest, "ii"),
BUILDIN_DEF(showevent, "ii"),
+
+ // Costume System
+ BUILDIN_DEF(costume,"i"),
+
{NULL,NULL,NULL},
};
Index: status.c
===================================================================
--- status.c (revision 17306)
+++ status.c (working copy)
@@ -2455,7 +2455,7 @@
pc_delautobonus(sd,sd->autobonus3,ARRAYLENGTH(sd->autobonus3),true);

// Parse equipment.
- for(i=0;i<EQI_MAX-1;i++) {
+ for(i=0;i<EQI_MAX_BONUS;i++) {
current_equip_item_index = index = sd->equip_index[i]; //We pass INDEX to current_equip_item_index - for EQUIP_SCRIPT (new cards solution) [Lupus]
if(index < 0)
continue;
Index: battle.conf
===================================================================
--- battle.conf (revision 17306)
+++ battle.conf (working copy)
@@ -141,3 +141,9 @@
// range. For example, Sonic Blow requires a 2 cell distance before autocasting is allowed.
// This setting also affects autospellwhenhit.
autospell_check_range: no
+
+// ****************************************
+// Reserved Costume ID's
+// ****************************************
+// Reserved Char ID for costume converted items.
+reserved_costume_id: 999998

Что я здесь изменил:

atccommand.c :


ACMD_DEF2("costumeitem", item)

На:


{ "costumeitem", 60,60, atcommand_item },

Хорошо, поехали дальше :

script.c :


+ log_pick_pc(sd, LOG_TYPE_SCRIPT, -1, &sd->status.inventory[i]);

и


+log_pick_pc(sd, LOG_TYPE_SCRIPT, 1, &sd->status.inventory[i]);

на:


log_pick(&sd->bl, LOG_TYPE_SCRIPT, sd->status.inventory[i].nameid, -1, &sd->status.inventory[i]);

и


log_pick(&sd->bl, LOG_TYPE_SCRIPT, sd->status.inventory[i].nameid, 1, &sd->status.inventory[i]);

Далее я добавил недостающие строки кода с rAthena, а именно:

pc.c:


if(pos & EQP_HEAD_LOW && pc_checkequip(sd,EQP_COSTUME_HEAD_LOW) == -1) {
if(id && !(pos&(EQP_HEAD_TOP|EQP_HEAD_MID)))
sd->status.head_bottom = id->look;
else
sd->status.head_bottom = 0;
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}
if(pos & EQP_HEAD_TOP && pc_checkequip(sd,EQP_COSTUME_HEAD_TOP) == -1) {
if(id)
sd->status.head_top = id->look;
else
sd->status.head_top = 0;
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}
if(pos & EQP_HEAD_MID && pc_checkequip(sd,EQP_COSTUME_HEAD_MID) == -1) {
if(id && !(pos&EQP_HEAD_TOP))
sd->status.head_mid = id->look;
else
sd->status.head_mid = 0;
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}
if(pos & EQP_COSTUME_HEAD_TOP) {
if(id){
sd->status.head_top = id->look;
} else
sd->status.head_top = 0;
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}
if(pos & EQP_COSTUME_HEAD_MID) {
if(id && !(pos&EQP_HEAD_TOP)){
sd->status.head_mid = id->look;
} else
sd->status.head_mid = 0;
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}
if(pos & EQP_COSTUME_HEAD_LOW) {
if(id && !(pos&(EQP_HEAD_TOP|EQP_HEAD_MID))){
sd->status.head_bottom = id->look;
} else
sd->status.head_bottom = 0;
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}


if(sd->status.inventory[n].equip & EQP_HEAD_LOW && pc_checkequip(sd,EQP_COSTUME_HEAD_LOW) == -1 ) {
sd->status.head_bottom = 0;
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}
if(sd->status.inventory[n].equip & EQP_HEAD_TOP && pc_checkequip(sd,EQP_COSTUME_HEAD_TOP) == -1 ) {
sd->status.head_top = 0;
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}


if(sd->status.inventory[n].equip & EQP_HEAD_MID && pc_checkequip(sd,EQP_COSTUME_HEAD_MID) == -1 ) {
sd->status.head_mid = 0;
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}

if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_TOP) {
sd->status.head_top = ( pc_checkequip(sd,EQP_HEAD_TOP) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_TOP)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}

if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_MID) {
sd->status.head_mid = ( pc_checkequip(sd,EQP_HEAD_MID) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_MID)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}

if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_LOW) {
sd->status.head_bottom = ( pc_checkequip(sd,EQP_HEAD_LOW) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_LOW)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}

pc.h:


EQP_COSTUME_HEAD_TOP = 0x000400, // 1024
EQP_COSTUME_HEAD_MID = 0x000800, // 2048
EQP_COSTUME_HEAD_LOW = 0x001000, // 4096


#define EQP_COSTUME (EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW)


EQI_MAX_BONUS = 10,
EQI_COSTUME_TOP,
EQI_COSTUME_MID,
EQI_COSTUME_LOW,
EQI_MAX

status.c:


if(i == EQI_COSTUME_MID && sd->equip_index[EQI_COSTUME_LOW] == index)
continue;
if(i == EQI_COSTUME_TOP && (sd->equip_index[EQI_COSTUME_MID] == index || sd->equip_index[EQI_COSTUME_LOW] == index))
continue;

Вроде бы ничего не забыл, так вот и всё бы ничего, но есть одно "очень маленькое НО" :

1. Надеваем Костюм, после чего прописываем @item <Любой ID шапки> , и выскакивает ошибка о том что Персонаж перегружен, смотрим на загруженность сумки , а там вес уходит в минус ( Например: Weight: -6564 / 10000)

2. Пишу команду: @job 4010(к примеру) . Итог: Крашит мап сервер

Есть подозрение что нет какой-либо проверки в pc.c

Соответственно прошу Вашей помощи, так как в С++ не особо силён . У кого какие идеи?

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

Понятно... на помощь я так понял рассчитывать не стоит, поступим иначе - готов заплатить, за помощь в решении проблемы.

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

Можно ревизию еа?

Не забыл? Или просто в пост не внес?


+++ battle.conf (working copy)
@@ -141,3 +141,9 @@
// range. For example, Sonic Blow requires a 2 cell distance before autocasting is allowed.
// This setting also affects autospellwhenhit.
autospell_check_range: no
+
+// ****************************************
+// Reserved Costume ID's
+// ****************************************
+// Reserved Char ID for costume converted items.
+reserved_costume_id: 999998

Изменено пользователем botka4aet
Ссылка на комментарий
Поделиться на другие сайты

Можно ревизию еа?

Не забыл? Или просто в пост не внес?


+++ battle.conf (working copy)
@@ -141,3 +141,9 @@
// range. For example, Sonic Blow requires a 2 cell distance before autocasting is allowed.
// This setting also affects autospellwhenhit.
autospell_check_range: no
+
+// ****************************************
+// Reserved Costume ID's
+// ****************************************
+// Reserved Char ID for costume converted items.
+reserved_costume_id: 999998

Это всё внесено, этот кусок же в диффе есть, всё что в диффе внесено. Ревизия 15268

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

Смотрю revision 17306, а там вместо


char item_name[100];
int number = 0, item_id, flag = 0;

следующее


char item_name[100];
int number = 0, bound = BOUND_NONE;

Ничего не поменяется дружище)

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

в pc.c попробуй чутка сменить:



if(pos&(EQP_HEAD_LOW|EQP_COSTUME_HEAD_LOW)) {
if(id && !(pos&(EQP_HEAD_TOP|EQP_HEAD_MID|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_TOP)))
sd->status.head_bottom = id->look;
else
sd->status.head_bottom = 0;
if((pos&EQP_HEAD_LOW && (pc_checkequip(sd,EQP_COSTUME_HEAD_LOW)) < 0) || pos&EQP_COSTUME_HEAD_LOW)
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}
if(pos&(EQP_HEAD_TOP|EQP_COSTUME_HEAD_TOP)) {
if(id)
sd->status.head_top = id->look;
else
sd->status.head_top = 0;
if((pos&EQP_HEAD_TOP && (pc_checkequip(sd,EQP_COSTUME_HEAD_TOP)) < 0) || pos&EQP_COSTUME_HEAD_TOP)
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}
if(pos&(EQP_HEAD_MID|EQP_COSTUME_HEAD_MID)) {
if(id && !(pos&(EQP_HEAD_TOP|EQP_COSTUME_HEAD_TOP)))
sd->status.head_mid = id->look;
else
sd->status.head_mid = 0;
if((pos&EQP_HEAD_MID && (pc_checkequip(sd,EQP_COSTUME_HEAD_MID)) < 0) || pos&EQP_COSTUME_HEAD_MID)
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}



if(sd->status.inventory[n].equip & EQP_HEAD_LOW) {
sd->status.head_bottom = ( pc_checkequip(sd,EQP_COSTUME_HEAD_LOW) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_COSTUME_HEAD_LOW)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}
if(sd->status.inventory[n].equip & EQP_HEAD_TOP) {
sd->status.head_top = ( pc_checkequip(sd,EQP_COSTUME_HEAD_TOP) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_COSTUME_HEAD_TOP)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}
if(sd->status.inventory[n].equip & EQP_HEAD_MID) {
sd->status.head_mid = ( pc_checkequip(sd,EQP_COSTUME_HEAD_MID) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_COSTUME_HEAD_MID)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}
if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_TOP) {
sd->status.head_top = ( pc_checkequip(sd,EQP_HEAD_TOP) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_TOP)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}
if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_MID) {
sd->status.head_mid = ( pc_checkequip(sd,EQP_HEAD_MID) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_MID)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}
if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_LOW) {
sd->status.head_bottom = ( pc_checkequip(sd,EQP_HEAD_LOW) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_LOW)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}

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

в pc.c попробуй чутка сменить:



if(pos&(EQP_HEAD_LOW|EQP_COSTUME_HEAD_LOW)) {
if(id && !(pos&(EQP_HEAD_TOP|EQP_HEAD_MID|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_TOP)))
sd->status.head_bottom = id->look;
else
sd->status.head_bottom = 0;
if((pos&EQP_HEAD_LOW && (pc_checkequip(sd,EQP_COSTUME_HEAD_LOW)) < 0) || pos&EQP_COSTUME_HEAD_LOW)
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}
if(pos&(EQP_HEAD_TOP|EQP_COSTUME_HEAD_TOP)) {
if(id)
sd->status.head_top = id->look;
else
sd->status.head_top = 0;
if((pos&EQP_HEAD_TOP && (pc_checkequip(sd,EQP_COSTUME_HEAD_TOP)) < 0) || pos&EQP_COSTUME_HEAD_TOP)
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}
if(pos&(EQP_HEAD_MID|EQP_COSTUME_HEAD_MID)) {
if(id && !(pos&(EQP_HEAD_TOP|EQP_COSTUME_HEAD_TOP)))
sd->status.head_mid = id->look;
else
sd->status.head_mid = 0;
if((pos&EQP_HEAD_MID && (pc_checkequip(sd,EQP_COSTUME_HEAD_MID)) < 0) || pos&EQP_COSTUME_HEAD_MID)
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}



if(sd->status.inventory[n].equip & EQP_HEAD_LOW) {
sd->status.head_bottom = ( pc_checkequip(sd,EQP_COSTUME_HEAD_LOW) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_COSTUME_HEAD_LOW)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}
if(sd->status.inventory[n].equip & EQP_HEAD_TOP) {
sd->status.head_top = ( pc_checkequip(sd,EQP_COSTUME_HEAD_TOP) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_COSTUME_HEAD_TOP)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}
if(sd->status.inventory[n].equip & EQP_HEAD_MID) {
sd->status.head_mid = ( pc_checkequip(sd,EQP_COSTUME_HEAD_MID) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_COSTUME_HEAD_MID)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}
if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_TOP) {
sd->status.head_top = ( pc_checkequip(sd,EQP_HEAD_TOP) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_TOP)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_TOP,sd->status.head_top);
}
if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_MID) {
sd->status.head_mid = ( pc_checkequip(sd,EQP_HEAD_MID) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_MID)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_MID,sd->status.head_mid);
}
if(sd->status.inventory[n].equip & EQP_COSTUME_HEAD_LOW) {
sd->status.head_bottom = ( pc_checkequip(sd,EQP_HEAD_LOW) >= 0 ) ? sd->inventory_data[pc_checkequip(sd,EQP_HEAD_LOW)]->look : 0;
clif_changelook(&sd->bl,LOOK_HEAD_BOTTOM,sd->status.head_bottom);
}

Прошу прощения, а в чем заключается отличие, от того что указано выше в моем посте?

P.S Проблема так и не решена, , Перевес " в минус" присутствует

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

Просто вопрос в том - работает ли вообще этот src?

Прошу уточнить, конкретно тот который ты выложил , или костюмы в целом?

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

GMtCk7W.png

bKC756L.png

Просто вопрос в том - работает ли вообще этот src?

Прошу уточнить, конкретно тот который ты выложил , или костюмы в целом?

Ну если я возьму этот патч и поставлю на рафину, то будет пахать?

Изменено пользователем botka4aet
Ссылка на комментарий
Поделиться на другие сайты

GMtCk7W.png

bKC756L.png

Просто вопрос в том - работает ли вообще этот src?

Прошу уточнить, конкретно тот который ты выложил , или костюмы в целом?

Ну если я возьму этот патч и поставлю на рафину, то будет пахать?

Если непосредственно сам дифф, то да, он под рафину и написан:)

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

×
×
  • Создать...
Яндекс.Метрика