(script) achat maison

Répondre
Partager Rechercher
Oui c'est possible.

En premier lieu tu fait ta boite de dialogue genre:
Citation :
----}C'est une maison modeste.
-> Acheter (condition : aucune clé dans l'inventaire)
----} Etes vous sûr de l'acheter? (vérifier que la maison n'est pas déjà prise)
-------> Oui (Si elle n'est pas prise alors prendre les Po et donner la clé approprié)
-------> Finalement non
-> Je suis le propriétaire (condition : avoir la clé associer dans l'inventaire)
----}Que voulez vous faire?
-------> Entrer (action : ouvrir la porte avec un délai pour la fermeture)
-------> Faire des doubles (action : donner une clé)
-------> Vendre(action : donner les Po et prendre la clé)
-> Entrer par effraction (action : crocheter la serrure, si réussite ouvrir la porte)
-> Partir
Oublie pas de donner une reconnaissance facile à ton dialogue. Il te faudra un scripte associer.

Une foi que tu as fait ça, tu utilise un scripte pour lancer le dialogue sur ta porte. Si le OnClick ne fonctionne pas (ce qui peu arriver), il te suffit de remplacer le GetClickingObject() par GetLastUsedBy(); et de placer ton scripte dans le OnUSed.
Citation :
OnClick
Code PHP:

void main()
{

object oPC GetClickingObject();

AssignCommand(oPCActionStartConversation(oPC"mondialogue")); 

SetLocalInt(OBJECT_SELFGetTag(OBJECT_SELF), TRUE);


ok donc j'ai crée un panneaux a coté de la porte le dial se lance mais qu'une partie c'est a dire
Citation :
----}C'est une maison modeste.
-> Acheter (condition : aucune clé dans l'inventaire)
----} Etes vous sûr de l'acheter? (vérifier que la maison n'est pas déjà prise)
-------> Oui (Si elle n'est pas prise alors prendre les Po et donner la clé approprié)
-------> Finalement non
cette partie la se lance dans le dial en sachant qu'une fois que j'ai acheté le dial est tjr en place.

j'ai un probleme :

-------> Oui (Si elle n'est pas prise alors prendre les Po et donner la clé approprié) , je demande 200 000 po donc j'ai bien crée le script mais sachant que j'ai que 75 po normalement je devrais pas pouvoir l'acheter mais la si.

j'ai un problème pour créer ce script ----} Etes vous sûr de l'acheter? (vérifier que la maison n'est pas déjà prise)
et autre chose j'aimerai que le dialogue se lance uniquement a un type d'ethnie que j'ai crée.

Merci

ps : c'est bien
Citation :
void main()
{

object oPC = GetLastUsedBy();

AssignCommand(oPC, ActionStartConversation(oPC, "mondialogue"));

SetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF), TRUE);

}

Dernière modification par Kragg le Severe ; 28/06/2014 à 21h57.
Je suis une débutant en thermes de scripte ^^ donc je ne garantie rien, mais je vais essayer de t'aider au mieux.

Donc on va faire ligne par ligne, histoire que tu voie un peu mieux le fonctionnement.
Citation :
-> Acheter (condition : aucune clé dans l'inventaire)
Il faut mette un scripte dans ta colonne "condition" de ton dialogue. Pour l'heure je suis en train de réfléchir à un moyen de vérifie que le joueur ne possède pas une clé dans son inventaire. Bon y aura toujours des petits malin pour contourner en déposer la clé par terre par exemple.
Citation :
----} Etes vous sûr de l'acheter? (vérifier que la maison n'est pas déjà prise)
Pour cette ligne je ne sais pas du tout comment faire. Je pense qu'il faut passer par une banque de donner ou quelque chose dans le genre.

Citation :
-------> Oui (Si elle n'est pas prise alors prendre les Po et donner la clé approprié)
Alors en premier lieu tu utilise le gc_check_gold dans ta condition de dialogue. Et ensuite tu ajoutes ga_give_item et ga_take_gold dans ta colone "action" de ta discution.

Dernière modification par Zanaphiela ; 29/06/2014 à 13h27.
Citation :
-> Acheter (condition : aucune clé dans l'inventaire)
si j'ai bien compris tu veux mettre ca
Code PHP:

//::///////////////////////////////////////////////
//:: FileName clef_entre_maiso
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 28/06/2014 19:58:56
//:://////////////////////////////////////////////
#include "nw_i0_tool"

int StartingConditional()
{

    
// Vérifier que le PJ qui parle possède ces objets dans son inventaire
    
if(!HasItem(GetPCSpeaker(), "CastralRocMaison1"))
        return 
FALSE;

    return 
TRUE;

Citation :
----} Etes vous sûr de l'acheter? (vérifier que la maison n'est pas déjà prise)
Il y a personne pour m'aider la ? :d

Citation :
-------> Oui (Si elle n'est pas prise alors prendre les Po et donner la clé approprié)
Code PHP:

//::///////////////////////////////////////////////
//:: FileName prendre_or_maiso
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 28/06/2014 21:32:52
//:://////////////////////////////////////////////
void main()
{
    
// Donner les objets à la personne qui parle
    
CreateItemOnObject("item001"GetPCSpeaker(), 1);


    
// Prendre de l’or au joueur
    
TakeGoldFromCreature(200000GetPCSpeaker(), TRUE);

c'est ce que j'ai fait mais si ta que 75 po la maison est vendu quand meme pas normal ..
Tu peux vérifier combien de PO l'objet a avant de lui retirer.

Code PHP:

int StartingConditional() 
{
  
object pc GetPCSpeaker();
  if(!
HasItem(pc"CastralRocMaison1"))
    return 
FALSE;
  if (
GetGold(pc) < 200000)
    return 
FALSE;
  return 
TRUE

Il faut que tu nous donne plus d'info. "ça fonctionne /pas" ne nous permet pas de t'aiguiller sur une solution.
Sans ton script on ne peut pas non plus savoir ce qui ne compile pas.

En l'état la seule aide que je peux te fournir c'est une traduction de l'erreur : IL MANQUE LE CROCHET DE FERMETURE D'UNE EXPRESSION (LIGNE 4).


Dernière modification par Lv4 ; 30/06/2014 à 22h10. Motif: .
Voulez vous achetez cette maison ?
--> Acheter
--> Etes vous sur de vouloir l'acheter ?
--> Oui (dans condition d'execution)
Code PHP:

int StartingConditional()
{
  
object pc GetPCSpeaker();
  if(!
HasItem(pc"CastralRocMaison1"))
    return 
FALSE;
  if (
GetGold(pc) < 200000)
    return 
FALSE;
  return 
TRUE;

et dans action conséquente
Code PHP:

//::///////////////////////////////////////////////
//:: FileName prendre_or_maiso
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 28/06/2014 21:32:52
//:://////////////////////////////////////////////
void main()
{
    
// Donner les objets à la personne qui parle
    
CreateItemOnObject("CastralRocMaison1"GetPCSpeaker(), 1);


    
// Prendre de l’or au joueur
    
TakeGoldFromCreature(200000GetPCSpeaker(), TRUE);

--> Finalement Non
Je suis le propriétaire que voulez vous faire ?
--> Entrer (dans condition d'execution)
Code PHP:

//::///////////////////////////////////////////////
//:: FileName clef_entre_maiso
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 28/06/2014 19:58:56
//:://////////////////////////////////////////////
#include "nw_i0_tool"

int StartingConditional()
{

    
// Vérifier que le PJ qui parle possède ces objets dans son inventaire
    
if(!HasItem(GetPCSpeaker(), "item001"))
        return 
FALSE;

    return 
TRUE;

--> Faire des doubles ! (dans action conséquente)
Code PHP:

//::///////////////////////////////////////////////
//:: FileName double_clef
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 28/06/2014 19:53:30
//:://////////////////////////////////////////////
void main()
{
    
// Donner les objets à la personne qui parle
    
CreateItemOnObject("item001"GetPCSpeaker(), 1);


--> Vendre (dans action conséquente)
Code PHP:

//::///////////////////////////////////////////////
//:: FileName prendre_or_clef
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 28/06/2014 20:01:09
//:://////////////////////////////////////////////
void main()
{

    
// Prendre de l’or au joueur
    
TakeGoldFromCreature(200000GetPCSpeaker(), TRUE);

    
// Enlever des objets de l’inventaire du joueur
    
object oItemToTake;
    
oItemToTake GetItemPossessedBy(GetPCSpeaker(), "CastralRocMaison1");
    if(
GetIsObjectValid(oItemToTake) != 0)
        
DestroyObject(oItemToTake);

Entré par effraction (dans condition d'execution)
Code PHP:

//::///////////////////////////////////////////////
//:: FileName prendre_or_clef
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 28/06/2014 20:01:09
//:://////////////////////////////////////////////
void main()
{

    
// Prendre de l’or au joueur
    
TakeGoldFromCreature(200000GetPCSpeaker(), TRUE);

    
// Enlever des objets de l’inventaire du joueur
    
object oItemToTake;
    
oItemToTake GetItemPossessedBy(GetPCSpeaker(), "CastralRocMaison1");
    if(
GetIsObjectValid(oItemToTake) != 0)
        
DestroyObject(oItemToTake);

Partir



(donc le 1er script ne compile pas et a partir du dialogue je suis le propriétaire etc n’apparaisse pas ? normal)
De mon côté je n'ai pas de problèmes pour compiler le script. La seule différence que je vois c'est que la fonction HasItem n'est pas déclaré chez moi.
J'ai estimé que tu avais déjà implémenté cette fonction mais on dirait que ce n'est pas le cas.

HasItem n'étant pas une fonction native, il faut l'implémenter. Pour ma part j'utilise la fonction [GetItemPossessedBy(object, string)]. Par exemple :
Code PHP:

int HasItem(object astring b)
{
  
// On renvoie FALSE si le retour de fonction est OBJECT_INVALID
  
return GetItemPossessedBy(ab) != OBJECT_INVALID;

Il te reste à déclarer cette fonction dans les scripts où tu l'utilise. Après tout devrait être bon je pense.


Edit: note que si TakeGoldFromCreature fonctionne même si le joueur n'a pas assez de pièce, il serait intéressant de vérifier le nombre de pièces d'un joueur avant chaque tentative de lui prendre des PO.

Dernière modification par Lv4 ; 01/07/2014 à 10h30. Motif: .
A mon avis tu devrais commencer par des scripts plus simples, car un système d'achat de maison personnelle est long et complexe à mettre en place si tu veux qu'il soit intéressant (surtout si tu veux faire du multi-joueur).

Essaye déjà de créer quelques quêtes, en regardant comment sont écrits les scripts de base (genre gc_checkgold, ga_takegold, ...), ça t'aidera beaucoup pour la suite
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés