Aller au contenu


[Script] Enlever ou rajouter une quantité d'objet au PC


  • Veuillez vous connecter pour répondre
Aucune réponse à ce sujet

#1 Virgo

Virgo

    ménagère Dremora


Posté 18 juin 2003 - 21:40

Les instructions AddItem et RemoveItem ne prennent pas de variables en paramètre, donc il est impossible de faire ceci:

Set Nombre to Player->GetItemCount Gold_001



Player->RemoveItem Gold_001 Nombre

Pour contourner le problème, il y a plusieurs façons de procéder:

1. Si vous êtes sûr que le nombre est petit:

Long Reste



Set Reste to Player->GetItemCount Gold_001



While ( Reste > 0 )

    Player->RemoveItem Gold_001 1

    Set Reste to ( Reste - 1 )

EndWhile

2. Si le nombre peut être vraiment important, on enlèvera par paquet, en utilisant des puissances de 2, sans dépasser 32768 (2^15) qui est la  valeur maximum utilisable pour une seule instruction AddItem ou RemoveItem.

Ici, on commence par le maximum, mais si le nombre d'objet est moyen, on peut faire moins de lignes en commençant par un nombre plus faible.

Long Reste



Set Reste to Player->GetItemCount Gold_001



While ( Reste > 0 )

    If ( Reste >= 32768 )

        Player->RemoveItem Gold_001 32768

        Set Reste to ( Reste - 32768 )

    EndIf

    If ( Reste >= 16384 )

        Player->RemoveItem Gold_001 16384

        Set Reste to ( Reste - 16384 )

    EndIf

    If ( Reste >= 8192 )

        Player->RemoveItem Gold_001 8192

        Set Reste to ( Reste - 8192 )

    EndIf

    If ( Reste >= 4096 )

        Player->RemoveItem Gold_001 4096

        Set Reste to ( Reste - 4096 )

    EndIf

    If ( Reste >= 2048 )

        Player->RemoveItem Gold_001 2048

        Set Reste to ( Reste - 2048 )

    EndIf

    If ( Reste >= 1024 )

        Player->RemoveItem Gold_001 1024

        Set Reste to ( Reste - 1024 )

    EndIf

    If ( Reste >= 512 )

        Player->RemoveItem Gold_001 512

        Set Reste to ( Reste - 512 )

    EndIf

    If ( Reste >= 256 )

        Player->RemoveItem Gold_001 256

        Set Reste to ( Reste - 256 )

    EndIf

    If ( Reste >= 128 )

        Player->RemoveItem Gold_001 128

        Set Reste to ( Reste - 128 )

    EndIf

    If ( Reste >= 64 )

        Player->RemoveItem Gold_001 64

        Set Reste to ( Reste - 64 )

    EndIf

    If ( Reste >= 32 )

        Player->RemoveItem Gold_001 32

        Set Reste to ( Reste - 32 )

    EndIf

    If ( Reste >= 16 )

        Player->RemoveItem Gold_001 16

        Set Reste to ( Reste - 16 )

    EndIf

    If ( Reste >= 8 )

        Player->RemoveItem Gold_001 8

        Set Reste to ( Reste - 8 )

    EndIf

    If ( Reste >= 4 )

        Player->RemoveItem Gold_001 4

        Set Reste to ( Reste - 4 )

    EndIf

    If ( Reste >= 2 )

        Player->RemoveItem Gold_001 2

        Set Reste to ( Reste - 2 )

    EndIf

    If ( Reste >= 1 )

        Player->RemoveItem Gold_001 1

        Set Reste to ( Reste - 1 )

    EndIf

EndWhile

Les mots s'arrêtent à ALMSIVI
(Exceptés ceux qui ont la priorité à droite -- Nérévar)




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)