T4NK

 tutoriel / partage [JAVA] Kolizeum ; Para/Rolivants

Recommended Posts

[glow=green]Salut à tous,[/glow]

 

 

Voici un code que j'ai fait ces vacances, c'est un petit cadeau.

Le code source du kolizeum, et surtout les quelques lignes à modifier pour pouvoir utiliser plusieurs types d'obvi en même temps.

 

Conditions d'utilisation :

 

Le code est commenté ce qui veut dire que vous devez TOUT lire (enfin les commentaires du moins) pour l'adapter selon votre serveur (et rajouter des paramètres à la config si vous voulez). Il y a quelques trucs a changer comme l'xp gagné, la map de départ, la map de retour...

 

import java.util.ArrayList; // a vous de gérer les imports selon votre version !
import java.util.Timer;
import java.util.TimerTask;
import java.util.Random;

public class Arena extends Thread {

private static ArrayList arenas = new ArrayList(); // Liste des Kolizeum en cours
private static Timer kick; // Timer de kick
private ArrayList team1 = new ArrayList(); // Team 1 du koli
private ArrayList team2 = new ArrayList(); // team 2 du koli
private int lvl_moyen; // level moyen du koli
private boolean lock = false; // Si le koli est lancé
public int PLAYERS_IN_KOLI; // Nombre de joueur dans le koli

public static final int LEVEL_RANGE = 25; // tranche de level max pour ce koli
public static final int MAX_PLAYERS_PER_KOLI = 3; // Nombre de joueur max dans un koli

private Arena(Personnage p) { // Constructeur pour un personnage seul
arenas.add(this);
lvl_moyen = p.get_lvl();
team1.add(p);
PLAYERS_IN_KOLI = 3;
SocketManager.GAME_SEND_MESSAGE(p, "Vous avez ete inscrit dans un Kolizeum de type : " + PLAYERS_IN_KOLI + "v" + PLAYERS_IN_KOLI, Ancestra.CONFIG_MOTD_COLOR);
start();
// Infos de debug, à virer si vous voulez.
// System.out.println("Creation du kolizeum n "+arenas.indexOf(this));
// System.out.println("Ajout du personnage : " + p.get_name() + "dans le koli"+arenas.indexOf(this));
}

private Arena(Group g) { // Constructeur pour un groupe
PLAYERS_IN_KOLI = g.getPersosNumber(); // Pas de verifs level pour les groupes, à fixer.
groupJoinTeam(g,team1,this);
lvl_moyen = (int)(team1.get(0).get_lvl() + team1.get(1).get_lvl())/2;
// System.out.println("DEBUG : Nouveau Koli groupe");
arenas.add(this);
start();
}
public void run() {
while (!lock) { // tant qu'elle n'est pas prete
while (team1.size() < PLAYERS_IN_KOLI || team2.size() < PLAYERS_IN_KOLI) // tant qu'il n'y a pas assez de monde
{ try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } // on attends un peu.
lock = this.ready();
if (!lock) {
sendBusyMessage(team1);
sendBusyMessage(team2);
try { Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); }
kickAllBusy(team1);
kickAllBusy(team2);
}
}
teleport(); // On les tp
SocketManager.GAME_SEND_MAP_NEW_DUEL_TO_MAP(team1.get(0).get_curCarte(), team1.get(0).get_GUID(), team2.get(0).get_GUID());
try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }
SocketManager.GAME_SEND_MAP_START_DUEL_TO_MAP(team2.get(0).get_curCarte(), team1.get(0).get_GUID(), team2.get(0).get_GUID());
team1.get(0).get_curCarte().newKoli(team1, team2);
try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }
for (int i=1; iteam1.get(0).get_fight().joinFight(team1.get(i), team1.get(0).get_GUID());
team2.get(0).get_fight().joinFight(team2.get(i), team2.get(0).get_GUID());
}

}

public static void setUpTimer() {
kick = new Timer();
kick.schedule(new TimerTask() {
public void run() {
for (Arena a : arenas) {
        a.kickAllBusy(a.team1);
        a.kickAllBusy(a.team2);
}
System.out.println("Koli : Kick de tous les inactifs effectue");
}
}, 240000L, 240000L);
}
private void kickAllBusy(ArrayList team) {
ArrayList tokick = new ArrayList();
for (Personnage p : team) {
if (p==null || p.get_fight()!=null || !p.isOnline()) {
SocketManager.GAME_SEND_MESSAGE(p, "Vous avez ete desinscrit du Kolizeum automatiquement pour cause d'inactivite.", Ancestra.CONFIG_MOTD_COLOR);
System.out.println(p.get_name()+ "a ete kick du koli"+arenas.indexOf(p.getArena()));
tokick.add(p);
}
}
for (Personnage p : tokick)
delPerso(p);

}
private void sendBusyMessage(ArrayList team) {
for (Personnage p : team) {
if (p.get_fight()==null && !p.is_away())
SocketManager.GAME_SEND_MESSAGE(p, "Les deux equipes du Kolizeum sont completes, mais certains joueurs sont occupes.", Ancestra.CONFIG_MOTD_COLOR);
else
SocketManager.GAME_SEND_MESSAGE(p, "Merci de vous rendre disponible, le Kolizeum va bientot commencer.", Ancestra.CONFIG_MOTD_COLOR);
}

}

private int getRandomMap() {
Random rand = new Random();
switch(rand.nextInt(4)+1) {
case 1 : return 85000; // ce sont les maps du koli, choisissez les vôtres
case 2 : return 85001;
case 3 : return 85002;
case 4 : return 85003;
default : return 85000;
}

}

private void teleport() {
short MAP_ID = (short) getRandomMap();
for (Personnage p : team1)
p.teleport(MAP_ID, World.getCarte(MAP_ID).getRandomFreeCellID());
for (Personnage p : team2)
p.teleport(MAP_ID, World.getCarte(MAP_ID).getRandomFreeCellID());
}

private boolean ready() {
boolean ready = true;
for ( Personnage p : team1 )
ready = p.isOnline() && p.get_fight()==null && ready;
for ( Personnage p : team2 )
ready = p.isOnline() && p.get_fight()==null && ready;
return ready;
}

private static Arena getArena(int lvl) {
for (Arena a : arenas) {
if ((((a.lvl_moyen - lvl) < LEVEL_RANGE && (a.lvl_moyen - lvl) > -LEVEL_RANGE)) && !a.lock)
return a;
}
return null;
}

private static Arena getArenaForGroupeBySize(Group group) {
System.out.println("Un groupe de taille : "+group.getPersosNumber()+" cherche a rejoindre un kolizeum");
for (Arena a : arenas) {
// System.out.println("Koli : Test dans getarenaforgroupebysize, arena "+arenas.indexOf(a)+" avec un players_in_koli de : "+a.PLAYERS_IN_KOLI+ ", une team1 de : "+a.team1.size()+", et une team2 de : "+a.team2.size());
if (a.team1.size()+group.getPersosNumber()<=a.PLAYERS_IN_KOLI) {
groupJoinTeam(group,a.team1,a);
return a;
}
else if (a.team2.size()+group.getPersosNumber()<=a.PLAYERS_IN_KOLI) {
groupJoinTeam(group,a.team2,a); 
return a;
}
}
return null;
}

private static void groupJoinTeam(Group g,ArrayList team, Arena a) {
for (Personnage p : g.getPersos()) {
team.add(p);
p.setArena(a);
SocketManager.GAME_SEND_MESSAGE(p, "Vous avez ete inscrit dans un Kolizeum de type : " + a.PLAYERS_IN_KOLI + "v" + a.PLAYERS_IN_KOLI, Ancestra.CONFIG_MOTD_COLOR);
}

}
public synchronized void delPerso(Personnage p) {
if (team1.contains(p))
team1.remove(p);
else
team2.remove(p);
if (this.isEmpty())
delArena(this);
p.setArena(null);
}

private static void delArena(Arena a) {
a.interrupt();
arenas.remove(a);
}

private boolean isEmpty() {
return team1.size()==0 && team2.size()==0;
}

public long getKamasReward() {
return this.PLAYERS_IN_KOLI*10000;
}

public long getXpReward(Personnage p) {
return 80000000L; // xp de fin de combat de kolizeum.
}

public static synchronized void addPerso(Personnage p) {
Arena a = getArena(p.get_lvl());
if (a==null)
a = new Arena(p);
else {
if (a.team1.size()a.team1.add(p);
SocketManager.GAME_SEND_MESSAGE(p, "Vous avez ete inscrit dans un Kolizeum de type : " + a.PLAYERS_IN_KOLI + "v" + a.PLAYERS_IN_KOLI, Ancestra.CONFIG_MOTD_COLOR);
}
else if (a.team2.size()SocketManager.GAME_SEND_MESSAGE(p, "Vous avez ete inscrit dans un Kolizeum de type : " + a.PLAYERS_IN_KOLI + "v" + a.PLAYERS_IN_KOLI, Ancestra.CONFIG_MOTD_COLOR);
a.team2.add(p);
}
else
a = new Arena(p);
}
p.setArena(a);
}
public static synchronized void addGroup(Group group) {
Arena a = getArenaForGroupeBySize(group);
if (a==null)
a = new Arena(group);
}
public boolean isLock() {
return this.lock;
}
public String infos(Personnage p) { // Lorsque quelqu'un veut les infos, ça kick aussi les non dispo.
kickAllBusy(team1);
kickAllBusy(team2);
StringBuilder infos = new StringBuilder("Vous êtes dans un Kolizeum de type "+PLAYERS_IN_KOLI+"v"+PLAYERS_IN_KOLI+".\nDans Votre team il y a :");
int count;
if (team1.contains(p)) {
infos.append(team1.size());
count = team2.size();
}
else {
infos.append(team2.size());
count = team1.size();
}
infos.append(" joueurs, dans la team adverse il y a : "+count+" joueurs.");
return infos.toString();
}

}
 

 

Cette classe est à mettre où vous voulez.

Ensuite une fonction à ajouter dans carte.java :

 

 

Un constructeur à ajouter dans fight.java :

 

 

Et ensuite pour les récompenses du koli, toujours dans fight.java il faut chercher ses lignes :

 

for (Fighter F : winTeam) {
 

 

et

 

for (Fighter F : looseTeam) {
 

 

Il faut y ajouter respectivement juste après l'accolade ces morceaux de code :

 

if (F.getPersonnage()!=null && F.getPersonnage().getArena()!=null && F.getPersonnage().getArena().isLock()) {
        F.getPersonnage().addKamas(F.getPersonnage().getArena().getKamasReward());
        SocketManager.GAME_SEND_MESSAGE(F.getPersonnage(), "Belle victoire ! Vous remportez "+ F.getPersonnage().getArena().getKamasReward() + " kamas.", Ancestra.CONFIG_MOTD_COLOR);
        F.getPersonnage().addXp(F.getPersonnage().getArena().getXpReward(F.getPersonnage()));
        SocketManager.GAME_SEND_MESSAGE(F.getPersonnage(), "Vous remportez aussi "+ F.getPersonnage().getArena().getXpReward(F.getPersonnage()) + " xp.", Ancestra.CONFIG_MOTD_COLOR);
        World.addObjet(World.newObjet(SQLManager.getNextObjetID(), 123456,
F.getPersonnage().getArena().PLAYERS_IN_KOLI, -1, ""),true); // le 123456 est l'id de l'objet à rajouter ! a changer
        SocketManager.GAME_SEND_MESSAGE(F.getPersonnage(), "Vous remportez aussi "+ F.getPersonnage().getArena().PLAYERS_IN_KOLI + " Kolizetons.", Ancestra.CONFIG_MOTD_COLOR);
        F.getPersonnage().teleport((short) 10111, 297); // CECI est la map et la cell de retour !
        F.getPersonnage().getArena().delPerso(F.getPersonnage());
}

if (F.getPersonnage()!=null && F.getPersonnage().getArena()!=null && F.getPersonnage().getArena().isLock()) {
        SocketManager.GAME_SEND_MESSAGE(F.getPersonnage(), "Vous avez perdu, c'est dommage.", Ancestra.CONFIG_MOTD_COLOR);
        F.getPersonnage().teleport((short) 10111, 297); // map de retour pour les perdants
        F.getPersonnage().getArena().delPerso(F.getPersonnage());
}
 

 

Un dernier truc à rajouter, dans le fichier personnage.java :

 

private Arena arena;
public Arena getArena() {
return arena;
}
public void setArena(Arena arena) {
this.arena = arena;
}
 

 

Et voici le code à mettre dans gamethread.java au niveau des commandes joueurs (ou créer une game action pour les commandes en sql).

 

if(msg.length()>4 && msg.substring(1, 5).equalsIgnoreCase("koli")){
        if (_perso.getArena()==null) {
        if (_perso.getGroup()==null) {
        Arena.addPerso(_perso);
        } else if (_perso.getGroup().getPersosNumber()<=Arena.MAX_PLAYERS_PER_KOLI)
        Arena.addGroup(_perso.getGroup());
        else
        SocketManager.GAME_SEND_MESSAGE(_perso, "Désolé, votre groupe est trop grand pour un Kolizeum. Le nombre maximal de joueur est : " + Arena.MAX_PLAYERS_PER_KOLI, Ancestra.CONFIG_MOTD_COLOR);
        } else if (_perso.get_fight()!=null) {
        SocketManager.GAME_SEND_MESSAGE(_perso, "Vous ne pouvez pas vous desinscrire maintenant !", Ancestra.CONFIG_MOTD_COLOR);
        } else {
        _perso.getArena().delPerso(_perso);
        SocketManager.GAME_SEND_MESSAGE(_perso, "Vous avez ete desinscrit au Kolizeum.", Ancestra.CONFIG_MOTD_COLOR);
        }
        return;
} else if (msg.length()>8 && msg.substring(1, 9).equalsIgnoreCase("infokoli")) {
        if (_perso.getArena()!=null) {
        SocketManager.GAME_SEND_MESSAGE(_perso, _perso.getArena().infos(_perso), Ancestra.CONFIG_MOTD_COLOR);
        } else
        SocketManager.GAME_SEND_MESSAGE(_perso, "Vous n'etes inscrit a aucun Kolizeum. Tapez .koli pour vous inscrire.", Ancestra.CONFIG_MOTD_COLOR);
        return;
}
 

 

Voilà, je laisse le soin aux gens de mettre ça dans les émulateurs ancestra et dérivés.

 

Mes salutations,

  • Like 2

Share this post


Link to post
Share on other sites

N'oublie pas de citer l'auteur original.

 

Oui ça viens d'aidemu mais le code était mal formulé, j'ai du l'édité.

C'est pour ça que je dis que c'est de moi.

Share this post


Link to post
Share on other sites

Si c'étais le code d'Aid** il était bien fail, après je ne sais pas si les modifications de Madness sont bon, à test.

 

Je l'ais testé, je vois pas de bug.

Share this post


Link to post
Share on other sites

N'oublie pas de citer l'auteur original.

 

Oui ça viens d'aidemu mais le code était mal formulé, j'ai du l'édité.

C'est pour ça que je dis que c'est de moi.

 

Abuses pas -_-, t'as modifié 3 trucs, t'aurais jamais su faire le koli toi-même je suis sur -.- (ps: c'est grâce à ça que je partagerai pas la correction de la faille kamas & autre *_*)

Share this post


Link to post
Share on other sites

N'oublie pas de citer l'auteur original.

 

Oui ça viens d'aidemu mais le code était mal formulé, j'ai du l'édité.

C'est pour ça que je dis que c'est de moi.

 

Abuses pas -_-, t'as modifié 3 trucs, t'aurais jamais su faire le koli toi-même je suis sur -.- (ps: c'est grâce à ça que je partagerai pas la correction de la faille kamas & autre *_*)

 

Abuse pas ? Tu ne me connais pas, j'suis bien meilleure que ces boloss de dèv d'Aid qui savent pas formuler 10lignes de codes sans le rendre instable. Après tu penses ce que tu veux.

 

PS: Ta faille kamas est tellement simple à corriger *_*

 

Mes salutations,

Share this post


Link to post
Share on other sites

J'viens de voir le code original, mais dis donc, t'es trop un ouf ? T'as modifié 2 trucs, bravo.

 

Lequel ? Il y a actuellement plus de 12codes refaits sur le kolizeum.

Ecoute mec, bouge si mon code te plait pas.

Stop polluer mon sujet , tu as quel age ? 15ans ? Tu fais trop l'beau, reste tranquille.

Share this post


Link to post
Share on other sites

Sérieusement je te donnerai bien le lien de l'original mais comme c'est un forum concurrent je peux pas, & dis donc c'est exactement pareil au commentaire près, t'as changé 2variable sparce que ça n'allait pas avec ton emu alors c'est TON code ? Tu me fais bien rire en parlant de guignol d'autres forum, tu t'es pas regardé je crois xD

Share this post


Link to post
Share on other sites

Sérieusement je te donnerai bien le lien de l'original mais comme c'est un forum concurrent je peux pas, & dis donc c'est exactement pareil au commentaire près, t'as changé 2variable sparce que ça n'allait pas avec ton emu alors c'est TON code ? Tu me fais bien rire en parlant de guignol d'autres forum, tu t'es pas regardé je crois xD

 

Allez, va apprendre à coder le java & on en reparle. Tu es comme ces autres boloss d'aidemu , tu sors du code par le troue du cul.

Parle pas de MON code, mais d'un code. Mon code est bon généralement.

Share this post


Link to post
Share on other sites

T'arraches pas Madness, Defense veut simplement dire que tu n'as pas modifié grand chose du code original, si c'est faux démontres le avec des arguments autres que des insultes ...

Share this post


Link to post
Share on other sites

T'arraches pas Madness, Defense veut simplement dire que tu n'as pas modifié grand chose du code original, si c'est faux démontres le avec des arguments autres que des insultes ...

 

Je laisse ce gamin tranquil, il a 15ans & se permet de parler aux grands.

Share this post


Link to post
Share on other sites

Non mais là t'abuse Madness ...

Défense dit que tu n'as pas modif grand chose du code originel et ce il me semble sans te manquer de respect.

Et dans la quasi-totalité de tes messages tu t'arraches sur lui en te prenant pour un demi-dieu.

C'est trop compliqué de te conduire en personne mature et civilisé pour simplement lui démontrer son erreur, s'il en a vraiment fait une ?

 

Puis de quel droit tu te permets de le traiter de gamin de 15 alors que tu sais absolument rien sur lui ?

Share this post


Link to post
Share on other sites

Non mais là t'abuse Madness ...

Défense dit que tu n'as pas modif grand chose du code originel et ce il me semble sans te manquer de respect il me semble.

Et dans la quasi-totalité de tes messages tu t'arraches sur lui en te prenant pour un demi-dieu.

C'est trop compliqué de te conduire en personne mature et civilisé pour simplement lui démontrer son erreur, s'il en a vraiment fait une ?

 

Puis de quel droit tu te permets de le traiter de gamin de 15 alors que tu sais absolument rien sur lui ?

 

Que c'est un boulet, le code je l'ais totalement relu & j'ai corrigé plus de 45erreurs.

Share this post


Link to post
Share on other sites

Non mais là t'abuse Madness ...

Défense dit que tu n'as pas modif grand chose du code originel et ce il me semble sans te manquer de respect.

Et dans la quasi-totalité de tes messages tu t'arraches sur lui en te prenant pour un demi-dieu.

C'est trop compliqué de te conduire en personne mature et civilisé pour simplement lui démontrer son erreur, s'il en a vraiment fait une ?

 

Puis de quel droit tu te permets de le traiter de gamin de 15 alors que tu sais absolument rien sur lui ?

 

Comme t'es toute gentite ma nounou *_*

 

@Mad: Ouai c'est vrai tu fais les imports nécessaires et bim y'a plus d'erreurs (je sais je l'ai fait du CODE OFFICIEL DE ORIME). Depuis Linux Nicky a comparé le code de Orime et soit disant ton code, la ressemblance de la classe Arena était sureprenante, au commentaire près =). (Après les morceaux de codes du fight etc... o ns'en fou ça se personnalise si tu veux une récompense ou non ou ça se supprime même ;) allez bisou <3)

Share this post


Link to post
Share on other sites

Madness, c'est pas pour te contredire ni rien, mais Défense, quand il dis quelque chose ce n'est pas spécialement pour rien.

C'est qu'il a bien regarder la chose avant d'ouvrir sa bouche (Ouioui, il faut le connaître)

 

Sinon, partage quelques choses sur le forum qui n'est sur aucun autre forum pour montrer t'es capacité.

Share this post


Link to post
Share on other sites

tiens, pour les para/rollicans mad, un gars a pris d'aidemu pour mettre sur DOE:

Par ici

 

(pour t'éviter de faire genre c'est de toi hein ;))

 

 

 

Comme je ne suis pas comme ça, je poste également le code original d'orime (ajouté sur DOE, repris d'aidemu de Orime)

Par là

 

Là, je pense que je t'ai enterré vraiment vraiment loin, et il te faudra plus qu'une pelle, des insultes et tout autre chose pour de sortir de là, sur ce je te souhaite bonne chance, j'attends tes arguments.

  • Like 1

Share this post


Link to post
Share on other sites

tiens, pour les para/rollicans mad, un gars a pris d'aidemu pour mettre sur DOE:

Par ici

 

(pour t'éviter de faire genre c'est de toi hein ;))

 

 

 

Comme je ne suis pas comme ça, je poste également le code original d'orime (ajouté sur DOE, repris d'aidemu de Orime)

Par là

 

Là, je pense que je t'ai enterré vraiment vraiment loin, et il te faudra plus qu'une pelle, des insultes et tout autre chose pour de sortir de là, sur ce je te souhaite bonne chance, j'attends tes arguments.

 

M'enterrer ? Ais-je dis que tous étaient de moi ? Non, la majorité du code oui. Après, tu as des arguments, j'suis plutôt époustouflé & je n'ais plus rien à dire. Bravo à toi.

Share this post


Link to post
Share on other sites