Ktoś mi przypomniał o fragmencie skryptu który dałem kilka postów temu, zapomniałem tam dopisać że przy zakładaniu trzeba dać pustą animkę zakładającą item na slot.
Jest druga, prostsza metoda - polega na zrobieniu tarczy na slocie kuszy. Napisałem właśnie gotowy skrypt, jednak jako że nie mam Gothica nie wiem czy nie ma w nim błędów.
Item:itsh_shield_01INSTANCE itsh_shield_01 (C_Item)
{
name = "Drewniana tarcza";
mainflag = 16;
flags = ITEM_CROSSBOW;
material = 0;
protection [PROT_EDGE] = 10; //Tylko te wartości edytujemy. Pozostałe są pobierane od nich.
protection [PROT_POINT] = 30;
protection [PROT_FIRE] = 0;
protection [PROT_MAGIC] = 0;
on_equip = Equip_itsh_shield_01;
on_unequip = UnEquip_itsh_shield_01;
value = 100;
visual = "itsh_shield_01.3ds";
description = name;
//TEXT[0]= ""; //COUNT[0] = 0;
TEXT[1] = NAME_Prot_Edge; COUNT[1] = protection [2];
TEXT[2] = NAME_Prot_Point; COUNT[2] = protection [6];
TEXT[3] = NAME_Prot_Fire; COUNT[3] = protection [3];
TEXT[4] = NAME_Prot_Magic; COUNT[4] = protection [5];
TEXT[5] = NAME_Value; COUNT[5] = value;
};
FUNC VOID Equip_itsh_shield_01()
{
self.protection [1] += item.protection [2];
self.protection [2] += item.protection [2];
self.protection [6] += item.protection [6];
self.protection [3] += item.protection [3];
self.protection [5] += item.protection [5];
Mdl_ApplyOverlayMds (self,"Humans_Shield.mds");
};
FUNC VOID UnEquip_itsh_shield_01()
{
self.protection [1] -= item.protection [2];
self.protection [2] -= item.protection [2];
self.protection [6] -= item.protection [6];
self.protection [3] -= item.protection [3];
self.protection [5] -= item.protection [5];
Mdl_RemoveOverlayMds (self,"Humans_Shield.mds");
};
OverlayMDS:Humans_Shield.mdsModel ("HuS"){
meshAndTree ("Hum_Body_Naked0.ASC" DONT_USE_MESH)
aniEnum { modelTag ("DEF_HIT_LIMB" "zs_RightHand")
ani ("t_1h_2_1hRun" 1 "s_1hRun" 0.0 0.1 M. "Hum_1hSDrawT2.asc" F 4 14)
{
*eventTag (4 "DEF_FIGHTMODE" "1H")
*eventTag (4 "DEF_DRAWSOUND")
*eventSwapMesh (5 "ZS_CROSSBOW" "ZS_LEFTHAND")
*EventTag (5 "DEF_SWAPMESH" "ZS_CROSSBOW" "ZS_LEFTHAND")
}
ani ("t_1hRun_2_1h" 1 "s_1h" 0.1 0.0 M. "Hum_1hSDrawT2.asc" R 4 14)
{
*eventTag (4 "DEF_FIGHTMODE" "")
*eventTag (4 "DEF_UNDRAWSOUND")
*eventSwapMesh (5 "ZS_LEFTHAND" "ZS_CROSSBOW")
*EventTag (5 "DEF_SWAPMESH" "ZS_LEFTHAND" "ZS_CROSSBOW")
}
ani ("t_1h_2_1hRun" 1 "s_1hRun" 0.0 0.1 M. "Hum_1hSDrawT3.asc" F 5 14)
{
*eventTag (5 "DEF_FIGHTMODE" "1H")
*eventTag (5 "DEF_DRAWSOUND")
*eventSwapMesh (5 "ZS_CROSSBOW" "ZS_LEFTHAND")
*EventTag (5 "DEF_SWAPMESH" "ZS_CROSSBOW" "ZS_LEFTHAND")
}
ani ("t_1hRun_2_1h" 1 "s_1h" 0.1 0.0 M. "Hum_1hSDrawT3.asc" R 5 14)
{
*eventTag (5 "DEF_FIGHTMODE" "")
*eventTag (5 "DEF_UNDRAWSOUND")
*eventSwapMesh (5 "ZS_LEFTHAND" "ZS_CROSSBOW")
*EventTag (5 "DEF_SWAPMESH" "ZS_LEFTHAND" "ZS_CROSSBOW")
}
}
}
Tak jak pisałem da się zrobić też niezależnie od kuszy, ale wtedy trzeba skorzystać z jednej dodatkowej niewidocznej animki z eventTagiem przy zakładaniu i ściąganiu. Wtedy trzeba użyć innych flagsów oraz załączyć zestaw warunków, na przykład takich jak w poprzednim skrypcie, z tym że var int shield_equipped; musi być POZA funkcją, a jeśli mają używać tarcz także npc to najlepiej całkiem to wywalić a w warunku zastąpić przez self.aivar[43] .
MDS który załączyłem zajmuje się tylko przekładaniem pomiędzy slotami, animacje trzeba załatwić we własnym zakresie.
//edit: jako że tematy z podobnym pytaniem są ciągle zakładane, na moją prośbę Wowoz wydzielił posta z dyskusji na osobny temat. Przypominam jednak że skrypt pisałem w okresie kiedy nie mogłem korzystać z Gothica i był pisany z pamięci, więc może posiadać drobne błędy. Ogólną zasadę jednak wcześniej wielokrotnie testowałem i z pewnością działa.