Esempio n. 1
0
// charge un fichier de diplo (il vaut mieux partir d'un graphe vide avant de charger un jeu de fichiers)
func (g *DiploGraph) ReadDiploGraph(r *bufio.Reader, ascii bool, subjectIsTroll bool) error {
	line, err := r.ReadString('\n') // TODO : utiliser r.ReadLine() plutôt que r.ReadString('\n')
	for err == nil {
		tokens := strings.SplitN(line, ";", 6)
		if len(tokens) < 5 {
			fmt.Println("Ligne invalide")
			continue
		}
		sid := chrall.AtoId(tokens[0])
		eIsTroll := false
		if tokens[1] == "T" {
			eIsTroll = true
		}
		eid := chrall.AtoId(tokens[2])
		v := new(DiploVertice)
		sn := getOrCreateNode(g.Guilds, sid)
		sn.IsTroll = subjectIsTroll
		var en *DiploNode
		if eIsTroll {
			en = getOrCreateNode(g.Trolls, eid)
			en.IsTroll = true
		} else {
			en = getOrCreateNode(g.Guilds, eid)
		}
		v.Start = sn
		v.End = en
		sn.Starts = AddVertice(sn.Starts, v)
		en.Ends = AddVertice(en.Ends, v)
		v.Text = strings.Trim(tokens[3], " ")
		if ascii {
			v.Text = chrall.Iso88591ToUtf8(v.Text)
		}
		if tokens[4] == "ENNEMI" {
			v.Foe = true
		}
		g.Vertices[v.Key()] = v
		line, err = r.ReadString('\n')
		//~ if subjectIsTroll { // DEBUG de la diplo troll
		//~ fmt.Println(v.ColoredText())
		//~ }
	}
	if err != io.EOF {
		fmt.Println("Erreur au parsage de la diplo :")
		fmt.Println(err)
		return err
	}
	return nil
}
Esempio n. 2
0
func GetFormValueAsId(hr *http.Request, name string) int {
	values := hr.Form[name]
	if len(values) > 0 {
		return chrall.AtoId(values[0])
	}
	return 0
}
Esempio n. 3
0
// Lit un fichier csv contenant, triés par nombre de kills de trolls, une ligne pour
//  chaque troll connu (voir troll.go).
// Calcule les tableaux triés en fin de chargement
func (m *TksManager) ReadTrollCsvFileIfNew() error {
	mutexLectures.Lock()
	defer mutexLectures.Unlock()

	filename := filepath.Join(m.cheminDonnées, "trollstats.csv")
	if m.lastTrollFileRead > 0 {
		fi, err := os.Stat(filename)
		if err != nil {
			return err
		}
		if !!fi.IsDir() {
			return errors.New("TksManager : Fichier de stats " + filename + " introuvable ou anormal")
		}
		if fi.ModTime().Unix() < m.lastTrollFileRead {
			//fmt.Println("TksManager : le fichier n'a pas changé")
			return nil
		}
	}

	f, err := os.Open(filename)
	if err != nil {
		return err
	}
	defer f.Close()
	m.NbTrolls = 0
	r := bufio.NewReader(f)
	line, err := r.ReadString('\n')
	// notons qu'on ne supprime pas les anciennes stats avant, on remplace directement
	// Et au final on ne devrait pas souvent redimensionner la table
	for err == nil {
		tokens := strings.SplitN(line, ";", 13)
		if len(tokens) < 13 {
			fmt.Println("Ligne 	invalide")
		} else {
			tks := new(TrollInfos)
			trollId, _ := strconv.Atoi(tokens[0])
			tks.NbKillsTrolls = chrall.AtoId(tokens[1])
			tks.NbKillsMonstres = chrall.AtoId(tokens[2])
			tks.ClassementKillsTrolls = chrall.AtoId(tokens[3])
			tks.ClassementKillsMonstres = chrall.AtoId(tokens[4])
			tks.ClassifChrall = strings.Trim(tokens[8], " \n")
			tks.Nom = tokens[9]
			tks.Race = race(tokens[10])
			tks.Niveau = chrall.AtoId(tokens[11])
			tks.IdGuilde = chrall.AtoId(strings.Trim(tokens[12], " \n"))
			tks.Num = trollId
			if trollId >= len(m.Trolls) {
				if trollId >= cap(m.Trolls) {
					newSlice := make([]*TrollInfos, ((trollId+1)*5/4)+100)
					copy(newSlice, m.Trolls)
					m.Trolls = newSlice
				}
				m.Trolls = m.Trolls[0 : trollId+1]
			}
			m.Trolls[trollId] = tks
			m.NbTrolls++
		}
		line, err = r.ReadString('\n')
	}
	if err != io.EOF {
		fmt.Println("Erreur au parsage :")
		fmt.Println(err)
		return err
	}
	m.lastTrollFileRead = time.Now().Unix()
	fmt.Println("TksManager : Fichier des trolls lu")
	m.TrollsByKills = SortTrollInfos(m.Trolls, m.NbTrolls, func(troll *TrollInfos) int { return troll.NbKillsTrolls + troll.NbKillsMonstres })
	// on remplit le classement par kill, que l'on ne connait pas avant
	classement := -1
	nbKills := int(0)
	for i, t := range m.TrollsByKills {
		if t == nil {
			break
		}
		if t.NbKillsTrolls+t.NbKillsMonstres != nbKills {
			classement = i + 1
			nbKills = t.NbKillsTrolls + t.NbKillsMonstres
		}
		t.ClassementKills = int(classement)
	}
	//~ fmt.Println("\nTrollsByKills :")
	//~ for i, t := range(m.TrollsByKills) {
	//~ fmt.Printf(" #%d %s NbKillsTrolls=%d NbKillsMonstres=%d tag : %s \n", i+1, t.Nom, t.NbKillsTrolls, t.NbKillsMonstres, t.ClassifChrall)
	//~ if i==40 {
	//~ break
	//~ }
	//~ }
	m.TrollsByKillsMonstres = SortTrollInfos(m.Trolls, m.NbTrolls, func(troll *TrollInfos) int { return troll.NbKillsMonstres })
	m.TrollsByKillsTrolls = SortTrollInfos(m.Trolls, m.NbTrolls, func(troll *TrollInfos) int { return troll.NbKillsTrolls })
	m.AtkByKillsTrolls = SortTrollInfos(m.Trolls, m.NbTrolls, func(troll *TrollInfos) int {
		if strings.Index(troll.ClassifChrall, "ATK") >= 0 {
			return troll.NbKillsTrolls
		}
		return 0
	})
	return nil
}