Si j'ai bien compris :
nType 0 = BASE_ITEM_AMULET
nType 1 = BASE_ITEM_ARMOR
nType 2 = BASE_ITEM_ARROW
etc...dans l'ordre alphabétique des BASE_ITEM, c'est bien ça ?
En tous cas hier soir j'ai fait des essais, et en fait il est inutile de faire le test sur la main gauche car:
- si le joueur possède une arme c'est dans la main droite
- si le joueur possède une arme à 2 mains, c'est dans la main droite aussi
- si le joueur possède 2 armes, il en a forcément une dans la main droite
- il est impossible que le joueur ait une arme dans la main gauche et aucune dans la main droite
De plus, si on fait le test avec la main gauche, le script considère que le joueur est armé même si celui-ci n'a qu'une torche.
Par contre je ne me souviens plus si le joueur peut à la création de son perso dire qu'il est gaucher...auquel cas ça complique les choses...
Finalement j'ai abouti à ce script, qui n'est sûrement pas optimisé car je suis un débutant :
void main()
{
object oRight=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,GetPCSpeaker());
if (GetIsObjectValid(oRight))
{
SetLocalInt(GetFirstPC(),"possede_arme",1);
}
object oItem=GetFirstItemInInventory(GetPCSpeaker());
while (GetIsObjectValid(oItem))
{
int nType=GetBaseItemType(oItem);
switch (nType)
{
case BASE_ITEM_BASTARDSWORD: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_BATTLEAXE: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_DAGGER: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_SHORTSWORD: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_DART: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_DIREMACE: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_DOUBLEAXE: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_GREATAXE: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_GREATSWORD: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_HALBERD: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_HANDAXE: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_HEAVYCROSSBOW: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_HEAVYFLAIL: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_KATANA: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_LIGHTCROSSBOW: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_LIGHTFLAIL: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_LIGHTHAMMER: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_LIGHTMACE: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_LONGBOW: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_LONGSWORD: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_MAGICROD: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_MORNINGSTAR: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_SCIMITAR: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_SHORTBOW: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_SHORTSPEAR: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_SHURIKEN: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_THROWINGAXE: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_TWOBLADEDSWORD: SetLocalInt(GetFirstPC(),"possede_arme",1);
case BASE_ITEM_WARHAMMER: SetLocalInt(GetFirstPC(),"possede_arme",1);
}
oItem=GetNextItemInInventory(GetPCSpeaker());
}
}
J'ai laissé tomber le StartingConditionnal(), je ne m'en sortais pas...donc en fait on lance se script en action conséquente sur la phrase d'avant et après on vérifie juste si GetLocalInt(GetFirstPC(),"possede_arme") == 1
Si oui alors le gardien dit "Dépose tes armes avant d'entrer" sinon il dit "C'est bon, tu peux entrer"...