Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Fonctions de looting
Fonctions de looting
Par Tyn' le 16/9/2002 à 13:15:25 (#2166754)
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,"BLUEPRINT_DU_CORPS_VIDE",lCorpseLoc,FALSE);
object oCorpse = GetNearestObjectByTag("tCorpsPC",oPC);
//:: Etape 3 - Remplir le corps et vider le joueur
object oItem = GetFirstItemInInventory(oPC);
int nStack = 0;
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");
}
}
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);
SetFlagInt(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.");
}
}
Par Delis le 16/9/2002 à 18:23:17 (#2168683)
:D
JOL Archives 1.0.1
@ JOL / JeuxOnLine