Bon alors voila un systeme de mort qui, apres celle-ci crée un cadavre avec les objets du Pc décédé...
à l'origine, le scrip fait aussi en sorte qu'apres un certain temps, (une fois que l'assassin a eu largement le temps de se servir sur la tombe) l'inventaire de la tombe reviend dans l'inventaire du joueur..
bon cette partie là ne m'interresse pas du tout je ne voit pas trop l'interet.. donc baqué la si possible...
le probleme du script viens du faite qu'une fois mort, la tombe est crée, les objets de l'inventaire du pc sont retiré, mais il ne sont pas placé dans la tombe, donc perdu définitivement...
--> voici l'include que j'utilise dans mon script de mort simplement en rajoutant la variable SetLootable(oPlayer,10.0);
void SetUnlootable(object oPC, object oCorpse)
{
if(GetIsObjectValid(oCorpse) && GetIsPC(oPC) && GetLocalInt(oPC,"LOOTABLE") == 1)
{
location lCorpseLoc = GetLocation(oCorpse);
//:: Etape 1 - Vider le corps et rendre ses objets au joueur
object oItem = GetFirstItemInInventory(oCorpse);
int nStack = 0;
while(GetIsObjectValid(oItem))
{
//..rendre au joueur..
nStack = GetNumStackedItems(oItem);
CreateItemOnObject(GetTag(oItem),oPC,nStack);
//..et vider le corps..
DestroyObject(oItem);
oItem = GetNextItemInInventory(oCorpse);
}
//:: Etape 2 - Detruire le corps vide
DestroyObject(oCorpse);
SetLocalInt(oPC,"LOOTABLE",0);
}
else
{
if(GetIsObjectValid(oCorpse) != TRUE)
SendMessageToAllDMs("Erreur - Le corps du PJ loote est incorrect.");
if(GetIsPC(oPC) != TRUE)
SendMessageToAllDMs("Erreur - Le joueur a delooter n'est pas un joueur.");
if(GetLocalInt(oPC,"LOOTABLE") != 1)
SendMessageToAllDMs("Erreur - Le joueur a delooter n'est pas loote.");
}
}
void SetLootable(object oPC, float fDuration)
{
if(GetIsPC(oPC) && GetIsDead(oPC))
{
location lPCLoc = GetLocation(oPC);
//:: Etape 1 - Stoper les actions du joueur
AssignCommand(oPC,ClearAllActions());
//:: Etape 2 - Creer le corps
vector vPCLoc = GetPositionFromLocation(GetLocation(oPC));
vector vDecalage = Vector(0.0f,1.0f,0.0f);
vector vCorpsePosition = vPCLoc + vDecalage;
location lCorpseLoc = Location(GetArea(oPC),vCorpsePosition,GetFacing(oPC));
CreateObject(OBJECT_TYPE_PLACEABLE,"corpsaventurier",lCorpseLoc,FALSE);
object oCorpse = GetNearestObjectByTag("tCorpsPC",oPC);
//:: Etape 3 - Remplir le corps et vider le joueur
object oItem = GetFirstItemInInventory(oPC);
int nStack = 1;
while(GetIsObjectValid(oItem))
{
//..remplir le corps..
nStack = GetNumStackedItems(oItem);
CreateItemOnObject(GetTag(oItem),oCorpse,nStack);
//..et vider le joueur..
DestroyObject(oItem);
oItem = GetNextItemInInventory(oPC);
}
SetLocalInt(oPC,"LOOTABLE",1);
DelayCommand(fDuration,SetUnlootable(oPC,oCorpse));
}
else
{
SendMessageToAllDMs("Erreur - Le corps a creer n'est pas mort ou n'est pas un joueur");
}
}
le probleme dois surement venir des lignes de l'étape 3, nStack = GetNumStackedItems(oItem);
CreateItemOnObject(GetTag(oItem),oCorpse,nStack);, mais je suis incapable de le faire..
//:: Etape 3 - Remplir le corps et vider le joueur
object oItem = GetFirstItemInInventory(oPC);
int nStack = 1;
while(GetIsObjectValid(oItem))
{
//..remplir le corps..
nStack = GetNumStackedItems(oItem);
CreateItemOnObject(GetTag(oItem),oCorpse,nStack);
//..et vider le joueur..
DestroyObject(oItem);
oItem = GetNextItemInInventory(oPC);
}
...