| Petit problème avec le cron | |
|
Auteur | Message |
---|
Robin06
Nombre de messages : 14 Age : 34 Localisation : Cannes Date d'inscription : 28/06/2007
 | Sujet: Petit problème avec le cron Dim 20 Juil 2008, 21:18 | |
| Voilà j'ai essayé de créer une quête via un cron, j'ai pris exemple sur le mode de fonctionnement de l'auto announce, cependant ça ne marche pas, je m'en remets donc à votre savoir-faire pour m'aider à résoudre ce problème. Voici ma démarche : J'ai ajouté dans gameserver/data/scripts/__init.py import cron Ensuite j'ai mis dans gameserver/data/scripts/cron/__init__.py - Code:
__all__ = ['Event1'] print "" print "importing cron ..." for name in __all__ : try : __import__('data.jscript.cron.'+name,globals(), locals(), ['__init__'], -1) except: print "failed to import cron : ",name print "... done" print ""
Puis j'ai crée le script gameserver/data/scripts/cron/Event1.py qui contient : - Code:
print "Chargement d'event chrono..." import sys from net.sf.l2j.gameserver import Announcements from net.sf.l2j.gameserver import ThreadPoolManager from net.sf.l2j.gameserver.instancemanager import ZoneManager from net.sf.l2j.gameserver.model.zone import L2Zone from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance from net.sf.l2j.gameserver.model import L2World from java.lang import Runnable
INTERVAL = 120 # Intervalle de repetition de l'event en minutes DUREE = 40 # duree de l'event en minutes
class myTask( Runnable ): def __init__( self ): self.name = "Event_Test" def run( self ): #Annonce de depart Announcements.getInstance().announceToAll("------------EVENT-------------") Announcements.getInstance().announceToAll("Attention les zones PEACE...") Announcements.getInstance().announceToAll("deviennent zones PVP !!!") Announcements.getInstance().announceToAll("Tuez un max de monde !!!") Announcements.getInstance().announceToAll("PEACE zones are now PVP zones !") Announcements.getInstance().announceToAll("KILL KILL KILL!") Announcements.getInstance().announceToAll("-----------BY FAWN------------") #Gestion des zones toutes_zones = ZoneManager.getZones() zones_peace = toutes_zones.isPeace(True) zones_peace.isPeace(False) #Systeme Hero joueurs = L2World.getInstance().getAllPlayers() for i in joueurs : nb_kill = joueurs[i].getPvpKills() if nb_kill = nb_kill+10: joueurs[i].setHero(True) if joueurs[i].isDead()== True: joueurs[i].setHero(False)
startInstance = myTask() ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(startInstance,INTERVAL*60000,DUREE*60000) print "Event charge..."
Mais ça ne marche pas...S'agit-il d'une erreur d'import ou peut être d'utilisation d'une fonction. Je me suis référer à la javadoc de L2Jfree mais je pense que les fonctions sont les memes...Toujours est-il que je n'ai même pas l'affichage de l'annonce, qui elle, je pense est bonne au niveau du code. Merci d'avance pour vos réponses  PS: Je n'ai pas fais d'erreur d'indentation, c'est le copier/coller du code qui a ici decallé la première fonction " Announcements.getInstance().announceToAll" |
|
 | |
Divinity

Nombre de messages : 1282 Age : 29 Localisation : Yvelines Date d'inscription : 24/05/2006
 | Sujet: Re: Petit problème avec le cron Dim 20 Juil 2008, 22:27 | |
| Hello,
Tu dis avoir L2JFree, alors normalement les import se font avec : com.l2jfree.gameserver et non net.sf.l2j.gameserver, ça doit être pareil pour les cron.
Ensuite, tu as un message d'erreur dans le GS disant que le fichier n'a pas été chargé ou autre ? |
|
 | |
Robin06
Nombre de messages : 14 Age : 34 Localisation : Cannes Date d'inscription : 28/06/2007
 | Sujet: Re: Petit problème avec le cron Dim 20 Juil 2008, 23:08 | |
| Je me suis renseigné sur les fonctions via la javadoc de L2Jfree, car je pense que les fonctions utilisées en java sont les mêmes, mais je suis sur L2J Pour le GS je vais regarder les logs...Non aucune erreur générée... |
|
 | |
Respawner

Nombre de messages : 1622 Age : 29 Date d'inscription : 20/04/2006
 | Sujet: Re: Petit problème avec le cron Dim 20 Juil 2008, 23:15 | |
| Le système de zones est différent vu que tu l'utilises je parirais la dessus. Heu question bête, t'as paramétré la table global_tasks pour lancer ton script là ? |
|
 | |
Robin06
Nombre de messages : 14 Age : 34 Localisation : Cannes Date d'inscription : 28/06/2007
 | Sujet: Re: Petit problème avec le cron Dim 20 Juil 2008, 23:17 | |
| Je vais faire un test en ne laissant que les annonces pour vérifier... PS: Quelqu'un aurait-il une javadoc L2J ? Je n'en ai pas trouvé... Ah on m'a parlé de ça, et j'avoue que du coté SQL je sais pas trop y faire Je dois faire quoi ? Ajouter une table Event1.py, ou un truc du genre ? |
|
 | |
Divinity

Nombre de messages : 1282 Age : 29 Localisation : Yvelines Date d'inscription : 24/05/2006
 | Sujet: Re: Petit problème avec le cron Dim 20 Juil 2008, 23:33 | |
| Regarde dans la table "global_task". |
|
 | |
Jules

Nombre de messages : 385 Localisation : Rome Date d'inscription : 11/04/2008
 | Sujet: Re: Petit problème avec le cron Lun 21 Juil 2008, 08:30 | |
| |
|
 | |
Robin06
Nombre de messages : 14 Age : 34 Localisation : Cannes Date d'inscription : 28/06/2007
 | Sujet: Re: Petit problème avec le cron Sam 26 Juil 2008, 19:27 | |
| Je dois faire quoi dans la table global_task ??  |
|
 | |
Robin06
Nombre de messages : 14 Age : 34 Localisation : Cannes Date d'inscription : 28/06/2007
 | Sujet: Re: Petit problème avec le cron Mar 05 Aoû 2008, 00:42 | |
| ok tout est maintenant bon dans la table Global_Tasks, cependant un problème subsiste, voici l'avancée actuelle du code : - Code:
# -*- coding: cp1252 -*- print "Chargement d'event chrono..." import sys from net.sf.l2j.gameserver import Announcements from net.sf.l2j.gameserver import ThreadPoolManager from net.sf.l2j.gameserver.model.zone.type import L2TownZone as Zone from net.sf.l2j.gameserver.model import L2Character as Char #Pour isFlying()(bool) from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance as Instance from net.sf.l2j.gameserver.model import L2World from java.lang import Runnable
INTERVAL = 120 # Intervalle de repetition de l'event en minutes DUREE = 45 # duree de l'event en minutes
class myTask( Runnable ): def __init__( self ): self.name = "Event1" def run( self ): #Annonce de depart => Ok ! Announcements.getInstance().announceToAll("------------EVENT-------------") Announcements.getInstance().announceToAll("Attention les zones PEACE...") Announcements.getInstance().announceToAll("deviennent zones PVP !!!") Announcements.getInstance().announceToAll("Tuez un max de monde !!!") Announcements.getInstance().announceToAll("PEACE zones are now PVP zones !") Announcements.getInstance().announceToAll("KILL KILL KILL!") Announcements.getInstance().announceToAll("-----------BY FAWN------------") #Gestion des zones 1 for i in range(1,23):#Pour les ID des villes, elles vont de 1 à 22 Zone(i).getInstance().isPeaceZone(False)#Rend toutes les villes PVP => Ok ! #Recupération du nombre de joueurs 1 instance_joueurs = L2World.getInstance().getAllPlayers()#Retourne les joueurs online(tableau?) => Ok ! nombre_joueurs = L2World.getInstance().getAllPlayersCount()#Retourne le nombre de joueurs online(int) => Ok ! #Récupération du nombre de Kills en PVP for i in instance_joueurs: kills_max = []#Tableau vide nb_kill_1 = instance_joueurs[i].getPvpKills()#Retourne les kills PvP(int) nb_kill_2 = instance_joueurs[i].getPkKills()#Retourne les kills PK(int) nb_kill = nb_kill_1+nb_kill_2# Fais le total des kills(int) if ((nb_kill == nb_kill+10)and(instance_joueurs[i].isDead()== False):#Si le nombre de kills augmente de 10 sans mourrir. instance_joueurs[i].isHero(True)#Mets l'aura Hero sans les skills ??? if (instance_joueurs[i].isDead()== True):#Si le joueur meurt instance_joueurs[i].isHero(False)#Enleve l'aura Hero #Système des titres 1 ancien_titre = instance_joueurs[i].getTitle()#Met le titre du joueur en mémoire if (nb_kill+=1): instance_joueurs[i].setTitle(str(nb_kill)+" joueurs OWNED !")#Attribut un nouveau titre affichant le nombre de kills #Annonce Meilleur Killer de l'Event 1 kills_max.append(nb_kill)#On remplit le tableau avec les valeurs de nb_kill de chaque joueur kills_max.sort()#On les trie par ordre croissant valeur_max = kills_max[len(kills_max)-1]#Retourne le plus grand nombre de kills if (nb_kill_1) == (Valeur_max - nb_kill2):#Trouve le meilleur killer nom_du_joueur = instance_joueurs[i].getName()#Met le nom du joueur en mémoire #Marque la fin de l'event ??? if (ThreadPoolManager.getInstance().isShutDown()==True): #Gestion des zones 2 for i in range(1,23):#Pour les ID des villes, elles vont de 1 à 22 Zone(i).getInstance().isPeaceZone(True)#Rend toutes les villes PEACE => Ok ! #Système des titres 2 #Recupération du nombre de joueurs 2 instance_joueurs_2 = L2World.getInstance().getAllPlayers()#Retourne les joueurs online(tableau?) => Ok ! for i in instance_joueurs_2: instance_joueurs[i].setTitle(ancien_titre)#Remet l'ancien titre #Annonce Meilleur Killer de l'Event 2 Announcements.getInstance().announceToAll("Le Meilleur Killer est"+" "+nom_du_joueur+" "+"Avec"+" "+str(valeur_max)+" "+"Kills !" Announcements.getInstance().announceToAll("Les villes redeviennent PEACE...Soufflez un peu ;)") startInstance = myTask() ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(startInstance,INTERVAL*60000,DUREE*60000)
Maintenant j'aimerais pouvoir ensuite tout remettre en ordre une fois la durée dépassée(remettre les villes en peace zone et les anciens titres des joueurs ainsi qu'une annonce pour dire qui est le vainqueur et son nombre de kills), j'ai regardé dans le java du ThreadPoolManager et je ne trouve aucune fonction définissant une "fin"...J'ai donc essayé if (ThreadPoolManager.getInstance().isShutDown()==True): Si quelqu'un a une meilleure idée... |
|
 | |
Contenu sponsorisé
 | Sujet: Re: Petit problème avec le cron  | |
| |
|
 | |
| Petit problème avec le cron | |
|