Forum pour réunir les administrateurs de serveur L2
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  

Partagez | 
 

 [PY] limiter l'accès à un shop

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
darknessneo



Nombre de messages : 36
Date d'inscription : 29/04/2010

MessageSujet: [PY] limiter l'accès à un shop   Mer 12 Mai 2010, 15:33

Bonjour à tous.
J'ai un petit projet de laboratoire pour créer des potions. Le labo est déjà opérationnel.
On y accède via un NPC existant : Ralford, un trader de ivory.
J'ai simplement rajouté une ligne vers mon shop multisell de potions.

Mais maintenant, je voudrais qu'il ne soit disponible que pour certaines classes. Ou plus exactement, que les classes fighters ou mage offensif ne puissent avoir accès qu'aux potions de base, et les classes healers, à toutes les potions.

Tout cela en py.

Seulement je bloque...
Je débute en py, et j'ai lu le tuto dispo sur ce forum.
Mais je n'arrive à rien.

Voila donc le code de mon npc :

Code:
<html><body>Merchant Ralford:<br>
You look like you've been doing some traveling, eh! Did you pass by the Elven Village? How are things there? Ah, I miss it so much...<br>
Oh, pardon me for indulging my nostalgia. It is a common failing we Elves have, you know...<br><br>
About the labotory, i can make specials potions. I need somes mats like Mana Herb or Healing Herb. So dont destroy them!<br>
<a action="bypass -h npc_%objectId%_Buy 3016501">Buy/sell consommable.</a><br>
<a action="bypass -h npc_%objectId%_multisell 400000001">Laboratory : <font color="LEVEL">creat potions</font>.</a><br>
<a action="bypass -h npc_%objectId%_TerritoryStatus">View information about the local lord and tax rate.</a><br>
<a action="bypass -h npc_%objectId%_Quest 30165_laboratory">Laboratory : <font color="LEVEL">TEST</font>.</a><br>
<a action="bypass -h npc_%objectId%_Quest">Quest</a>
</body></html>

Le premier labotory est celui qui fonctionne, le deuxième est le laboratory limité aux classes.

Dans le dossier data/scripts/custom/
j'ai crée un dossier 30165_laboratory
dedans j'ai mis mon fichier py et un fichier main.htm.

J'ai tout simplement reprit le fichier py du tuto pour mes tests avant de commencer les choses sérieuses.

J'ai laissé le fichier py tel que dans le tuto :

Code:
print "importing custom data: 30165_laboratory"
import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
qn = "30165_laboratory"
class Quest (JQuest) :

def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

def onEvent (self,event,st) :
htmltext = event

# Mon Objet
if event == "1":
if st.getQuestItemsCount(57) >= 1000000:
st.takeItems(57,1000000)
st.giveItems(81,1)
htmltext = "Transaction Effectuee."
else:
htmltext = "Vous n'avez pas l'objet necessaire."

if event == "0":
htmltext = "Transaction Annuler."

if htmltext != event:
st.setState(COMPLETED)
st.exitQuest(1)

return htmltext

def onTalk (Self,npc,player):

npcId = npc.getNpcId()
st = player.getQuestState(qn)
htmltext = "Je n'ai rien a vous dire."
st.set("cond","0")
st.setState(STARTED)
return "main.htm"

QUEST = Quest(30165,qn,"custom")
CREATED = State('Start', QUEST)
STARTED = State('Started', QUEST)
COMPLETED = State('Completed', QUEST)

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(30165)

QUEST.addTalkId(30165)

modifié bien sur pour mon npc et mon dossier.
Et enfin le fichier main :

Code:
<html><head><body>
<font color="LEVEL">Objets en Vente</font>
:<br><left><table width=270 border=0><tr>
<td width=35><img src="icon.weapon_dragon_slayer_i00" width=32 height=32 align="left"></td>
<td width=235><table border=0 width="230">
<tr><td>Dragon Slayer X 1</td></tr>
<tr><td></td></tr></table></td></tr></table><br><br><br>
<font color="LEVEL">Objet(s) Requis</font>
<br><table width=270><tr>
<td><img src="icon.ect_adena_i00" width=32 height=32 align="left"></td>
<td><table border=0 width="230"><tr><td>Adena</td>
</tr><tr><td>Adena X 1000000 [1,000,000]</td>
</tr>  </table></td>
</tr></table><br><br>
<table width=270>
<tr><td width=90> </td>
<td width=90><button value="Echanger" action="bypass -h Quest 30165_laboratory 1" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"></td>
<td width=90><button value="Annuler" action="bypass -h Quest 30165_laboratory 0" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"></td>
</tr></table><br></left>
</body></html>

Mais voila, mon npc ne veut rien entendre...
voila ce qu'il me dit sans cesse :
You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.

Là, ce n'est plus dans mes compétences.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Akira



Nombre de messages : 160
Age : 31
Date d'inscription : 08/01/2008

MessageSujet: Re: [PY] limiter l'accès à un shop   Jeu 13 Mai 2010, 10:25

Dès que j'ai 5 minutes je te donnne un coup de main j'ai deja fais un truck comme ça il y a quelque semaine... mais moi je n'es pas mis des conditions en fonction des races , class, sex etc .......

je pense que c'est dans mes cordes...

Cordialement akira

P.S si ta déjà resolue ton problement fait le moi savoir.....
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
darknessneo



Nombre de messages : 36
Date d'inscription : 29/04/2010

MessageSujet: Re: [PY] limiter l'accès à un shop   Jeu 13 Mai 2010, 13:20

EDIT

Bon, j'ai du neuf, j'ai finalement appris qu'il fallait rajouter une ligne dans config.cfs (j'suis pas sur pour l'extension). Après plusieurs erreurs j'ai finalement obtenu un fichier sans log d'erreur, et mon npc me dit plus blablabla. Mais il ne se passe rien.
Je dois donc maintenant coder correctement mon py.
Voila mon fichier actuel :

Code:

# Created by DrLecter
import sys

from com.l2jserver.gameserver.model.quest        import State
from com.l2jserver.gameserver.model.quest        import QuestState
from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest

qn = "30165_laboratory"
NPC=30165

class Quest (JQuest) :

 def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

 def onTalk (Self,npc,player):
   #ON CHOISI UN SHOP TEST POUR LE MOMENT
   multisell=400000001
   htmltext=st.showHtmlFile("main.htm").replace("%msid%",str(multisell))
   st.exitQuest(1)
   return htmltext

QUEST      = Quest(-1,qn,"Custom")

FIN EDIT

salut, et merci pour ta réponse. Non non, j'ai pas trouvé, et au lieu de m'arracher les cheveux je suis passé sur un autre truc en attendant.
Donc ton aide me serais très précieuse.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Akira



Nombre de messages : 160
Age : 31
Date d'inscription : 08/01/2008

MessageSujet: Re: [PY] limiter l'accès à un shop   Ven 14 Mai 2010, 15:24

Re pas eu le temps de le test mais ca devrai fonctionné
Voila la marche a suivre
Dans le dossier data/scripts/quests/
créer un dossier et nomme le 30165_laboratory
dedans tu mets ton fichier __init__.py et un fichier main.htm

ensuite tu trouves le fichier scripts.cfg dans le dossier data (pour l2j, voir si c'est la meme chose chez l2jfree....)
à la fin tout des lignes déjà présente:
tu rajoute cette ligne
#Mon custom Merchant
quests/30165_laboratory/__init__.py

ensuite tu redémare ton serveur et ça devrai fonctionner
apres tu me dira un peu plus sur les races les classes etc... pour que je te les rajoute....

oups le fichier __init__.py

Code:
#Npc laboratory by Akira(www.elysion.com) / L2jserveur -_-
# for darknessneo (l2jfr)
 
import sys
from com.l2jserver.gameserver.model.quest                      import State
from com.l2jserver.gameserver.model.quest                      import QuestState
from com.l2jserver.gameserver.model.quest.jython              import QuestJython as JQuest

#=======================================
#Base Config
#=======================================
#Quest Name
qn = "30165_laboratory"
ManagerId = 30165

# Laboratory Event NPC
NAME = "Laboratory Manager"

#Participation Fee (itemId, number)
IteamIdFee = [57,1000000]

IteamID = 81

class Quest (JQuest) :

    def __init__(self,id,name,descr):
        JQuest.__init__(self,id,name,descr)
      
    def onAdvEvent (self,event,npc,player):
      
        html = event
        st = player.getQuestState(qn)
        if not st: return

        if event = "1"
          html = "<html><title>"+str(NAME)+"</title><body>Manager:<br><br>Vous n'avez pas l'objet necessaire.</body></html>"
            if st.getQuestItemsCount(IteamIdFee[0]) >= IteamIdFee[1]:
                st.takeItems(IteamIdFee[0],IteamIdFee[1])
                st.giveItems(IteamID,1)
            html = "<html><title>"+str(NAME)+"</title><body>Manager:<br><br>Transaction Effectuee.</body></html>"
            return = html
         return = html
         
        if event == "0":
            htmltext = "<html><title>"+str(NAME)+"</title><body>Manager:<br><br>Transaction Annuler.</body></html>"
            return = html

   
    def onTalk (self,npc,player):
        npcId = npc.getNpcId()
        if npcId == MANAGER:
            st = player.getQuestState(qn)
            html = "main.htm"
        else :
            html = "<html><title>"+str(NAME)+"</title><body>Manager:<br><br>Je n'ai rien a vous dire.</body></html>"
        return html
      
QUEST      = Quest(-1,qn,"custom")
       
QUEST.addStartNpc(ManagerId)
QUEST.addTalkId(ManagerId)
print "Import laboratory shop ."
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
darknessneo



Nombre de messages : 36
Date d'inscription : 29/04/2010

MessageSujet: Re: [PY] limiter l'accès à un shop   Ven 14 Mai 2010, 20:37

merci pour ton aide, pour info, je venais de résoudre mon soucis cette après midi.

Voila mon code pour le moment, relativement simpliste je l'avoue, et plus que surement très maladroit.

Code:
# Created by Darknessneo
import sys

from com.l2jserver.gameserver.model.quest        import State
from com.l2jserver.gameserver.model.quest        import QuestState
from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest

qn = "30165_laboratory"
NPC =[ 30165 ]


class Quest (JQuest) :

 def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

 def onTalk (Self,npc,player):
    st = player.getQuestState(qn)
    if not st: return
    classId = player.getClassId()
    id = classId.getId()
    if id == 42 :         # shillien oracle
   htmltext = "30165-2.htm"
    elif id == 43 :         # Shilien Elder
        htmltext = "30165-1.htm"
    elif id == 112 :         # Shilien Saint
        htmltext = "30165-1.htm"
    else :
          st.exitQuest(1)
          htmltext = "main.htm"
    st.exitQuest(1)
    return htmltext
QUEST      = Quest(-1,qn,"Custom")

for item in NPC:
  QUEST.addStartNpc(item)
  QUEST.addTalkId(item)

Il fonctionne en tout cas. Je vais rajouter les autres classes encore.
Par contre, question :

Puis-je faire ouvrir le shop associé à la classe directement via le fichier sans avoir à le mettre dans une nouvelle page htm ? Parce que mon code ouvre la page avec le lien vers le shop, moi je voudrais ouvrir directement le shop.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: [PY] limiter l'accès à un shop   Aujourd'hui à 01:23

Revenir en haut Aller en bas
 
[PY] limiter l'accès à un shop
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Limiter l'accès à une section du forum
» Limiter l'accès à certaines catégories de mon forum
» limiter l'accès a un membre
» Limiter l'accès à un forum aux memebres peu actifs
» Les modés, peut on limiter leurs accès ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
L2J-FR :: Général :: Aides et Conseils-
Sauter vers: