Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > en deduire un seul
en deduire un seul
Par Blam le 31/1/2003 à 22:14:02 (#3144904)
Cela marche parfaitement, sauf que quand le joueur a deux "oeil de licorne", ou plus, tout est enlevé !
Qui a une idée de la manière a en enlever qu'une ?
vala le script//
// Enlever des objets de linventaire du joueur
object oItemToTake;
oItemToTake = GetItemPossessedBy(GetPCSpeaker(), "Oeildelicorne");
if(GetIsObjectValid(oItemToTake) != 0)
DestroyObject(oItemToTake);
object oPC = GetLastUsedBy(); // GetLastUsedBy défini la dernière personne qui a utilisé l'objet
if (GetIsPC(oPC)) // On vérifie que la personne est bien Le PC (personnage joueur=
{
object oTarget = GetWaypointByTag ("NW_YEUXPOINT001"); // On défini la destination de la téléportation qui est un Waypoint avec le Tag wp_destination (vous pouvez changer le nom)
AssignCommand( oPC, JumpToObject( oTarget)); // On assigne la commande au Joueur de se téléporter à la destination
}
}
Par Jaha Effect le 31/1/2003 à 23:19:02 (#3145341)
if(GetIsObjectValid(oItemToTake) != 0)
parif(GetIsObjectValid(oItemToTake) )
Merci Jaha :)
Par Blam le 31/1/2003 à 23:36:41 (#3145490)
merci bien.
REEDITE Non cela ne fonctionne pas, c'est pas ca
Par Jaha Effect le 31/1/2003 à 23:44:39 (#3145550)
Jaha Effect :D
Par Jaha Effect le 31/1/2003 à 23:48:54 (#3145575)
Il marche pas comment ton script? il compile pas? il fait pas ce que tu veux?
Jaha Effect :D
oui
Par Blam le 31/1/2003 à 23:51:01 (#3145592)
que au lieu d'enlever un objet, il enlève tous les objets avec le même tag.
je voudrais qu'il n'en enlève qu'un!
Par Jedaï le 1/2/2003 à 8:26:57 (#3146839)
Pour corriger ça, il suffit d'utiliser la fonction que voilà :
void DestroyStkObj(object oDestroy, int nNum, object oOwner );
void SpawnItem(string sTemplate, object oTarget, int nStack);
void main()
{
object oPC = GetPCSpeaker();
// Enlever des objets de linventaire du joueur
object oItemToTake = GetItemPossessedBy( oPC, "Oeildelicorne" );
if( GetIsObjectValid( oItemToTake ))
DestroyStkObj( oItemToTake, 1, oPC );
if (GetIsPC(oPC)) // On vérifie que la personne est bien Le PC
{
object oTarget = GetWaypointByTag ("NW_YEUXPOINT001"); // On défini la destination de la téléportation qui est un Waypoint avec le Tag wp_destination (vous pouvez changer le nom)
AssignCommand( oPC, JumpToObject( oTarget)); // On assigne la commande au Joueur de se téléporter à la destination
}
}
void SpawnItem(string sTemplate, object oTarget, int nStack);
{
CreateItemOnObject(sTemplate, oTarget, nStack);
}
void DestroyStkObj(object oDestroy, int nNum, object oOwner )
{
int nStk = GetNumStackedItems(oDestroy);
int nStk = nStk - nNum;
string sRef = GetResRef(oDestroy);
DestroyObject(oDestroy);
AssignCommand(GetModule(), DelayCommand(0.3, SpawnItem(sRef, oOwner, nStk)));
}
Voilà normalement ça doit marcher (aux erreurs de frappe près :D ) :cool:
je testerais lundi
Par Blam le 1/2/2003 à 8:44:49 (#3146856)
dabord, merci, ensuite:
comment rendre des objets empilables, non empilables ?
est ce possible seulement ?
Par Jedaï le 1/2/2003 à 13:21:46 (#3147900)
Dans le baseitems.2da, on trouve une propriété "stacking", mais j'ai essayé et la manipuler ne suffit pas à rendre un objet empilable si il ne l'était pas. A creuser, mais je pense que ça doit être codé plus profond pour éviter d'avoir des épées empilées sur son slot de main droite par exemple.:rolleyes:
Par Archamedes_Fr le 1/2/2003 à 13:45:30 (#3148070)
Merci du tuyau, ça peut être intéressant ça...
* J'ai jamais aimé les stacks de 99 flèches. *
compile pas
Par Blam le 4/2/2003 à 21:13:46 (#3171643)
void DestroyStkObj(object oDestroy, int nNum, object oOwner );
void SpawnItem(string sTemplate, object oTarget, int nStack);
void main()
{
object oPC = GetPCSpeaker();
// Enlever des objets de linventaire du joueur
object oItemToTake = GetItemPossessedBy( oPC, "Oeildelicorne" );
if( GetIsObjectValid( oItemToTake ))
DestroyStkObj( oItemToTake, 1, oPC );
if (GetIsPC(oPC)) // On vérifie que la personne est bien Le PC
{
object oTarget = GetWaypointByTag ("NW_YEUXPOINT001"); // On défini la destination de la téléportation qui est un Waypoint avec le Tag wp_destination (vous pouvez changer le nom)
AssignCommand( oPC, JumpToObject( oTarget)); // On assigne la commande au Joueur de se téléporter à la destination
}
}
void SpawnItem(string sTemplate, object oTarget, int nStack);
{ <-----------ICI-------------
CreateItemOnObject(sTemplate, oTarget, nStack);
}
void DestroyStkObj(object oDestroy, int nNum, object oOwner )
{
int nStk = GetNumStackedItems(oDestroy);
int nStk = nStk - nNum;
string sRef = GetResRef(oDestroy);
DestroyObject(oDestroy);
AssignCommand(GetModule(), DelayCommand(0.3, SpawnItem(sRef, oOwner, nStk)));
}
Par eMRaistlin le 4/2/2003 à 21:17:45 (#3171666)
quand ca compile pas a la ligne N, verifie aussi la ligne N-1 ^^
Tu as mis un point-virgule derriere la declaration de ta fonction : enleve le :)
ok vu :)
Par Blam le 4/2/2003 à 21:36:16 (#3171786)
ERROR ! VARIABLE ALREADY USED WHTHIN SCOPE
sur la ligne suivante:
int nStk = nStk - nNum;
une idée ?
Par eMRaistlin le 4/2/2003 à 22:27:51 (#3172075)
int nStk = GetNumStackedItems(oDestroy);
int nStk = nStk - nNum;
Tu defini la variable de type Entier (Int) du nom de "nStk" egale au nombre d'item stackes.
Puis tu definie un nouvelle variable Entier "nStk" egale a nStk - nNum
Tu as donc definis 2 entier differents mais identiques... Le compilateur ne comprends donc pas.
Pour corriger, c'est simple : int nStk = GetNumStackedItems(oDestroy);
nStk = nStk - nNum;
Et la, ce sera bon :)
hé oui un int en trop
Par Blam le 4/2/2003 à 22:52:34 (#3172241)
durdur
je donne mon royaume contre le savoir scripter :)
Merci encore
:lit:
JOL Archives 1.0.1
@ JOL / JeuxOnLine