Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Fonctions de looting

Par Tyn' le 16/9/2002 à 13:15:25 (#2166754)

J'ai créé deux petites fonctions qui vous permettront de looter et délooter un joueur mort. En réalité, la fonction crée un corps légèrement décalé par rapport au joueur, et transfert tous ses objets dedant. Je trouvais sale la manière dont les HCR fesaient apparaitre le corps directement sur le joueur... Et après tout, le système de looting peut interesser aussi d'autres utilisateurs que ceux des HCR :)

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)

Ajoute les dans le fil persistant des scripts "prets a servir"

:D

JOL Archives 1.0.1
@ JOL / JeuxOnLine