Aller au contenu

[JAVA] Ajouter les obvijevans sur son ému


Messages recommandés

Salut à tous,

 

aujourd'hui je vais créer un tuto pour ajouter les obvijevans 100%. Je sais très bien qu'il y aura des noobs qui critiquerons mais pas grave.

 

Je ne vous ferrez pas un tuto pour compiler, etc.. mais je vous conseils le tuto suivant :

https://funky-emu.net/topic/1275-compiler-ancestra-remake/

 

Donc, commencez par ouvrir Constants.java.

Chercher :

 

public static boolean isValidPlaceForItem(ObjTemplate template, int place)
 

Vous obtiendrez ça :

 

public static boolean isValidPlaceForItem(ObjTemplate template, int place)
{
switch(template.getType())
{
case ITEM_TYPE_AMULETTE:
if(place == ITEM_POS_AMULETTE)return true;
break;....etccc
 

rajoutez : entre public static boolean isValidPlaceForItem et switch(template.getType())

 

 

if(template.getID() == 9255 && place == ITEM_POS_AMULETTE)
return true;
if(template.getID() == 9256 && (place == ITEM_POS_ANNEAU1 || place == ITEM_POS_ANNEAU2))
return true;
if(template.getID() == 9233 && place == ITEM_POS_CAPE)
return true;
if(template.getID() == 9234 && place == ITEM_POS_COIFFE)
return true;
 

 

Allez dans gamethread.java

cherchez :

 

private void parseObjectPacket(String packet)
 

et ajoutez en dessous:

 

case 'x':
Object_obvijevan_desassocier(packet);
break;
case 'f':
Object_obvijevan_feed(packet);
break;
case 's':
Object_obvijevan_changeApparence(packet);
 

 

ensuite, chercher :

if(exObj != null)
 

et rajouter au dessus

 

 

Objet exObj = _perso.getObjetByPos(pos);//Objet a l'ancienne position
int objGUID = obj.getTemplate().getID();

if ((objGUID == 9234) || (objGUID == 9233) || (objGUID == 9255) || (objGUID == 9256))
{

if (exObj == null){// si on place l'obvi sur un emplacement vide
SocketManager.send(_perso, "Im1161");
return;
}
if (exObj.getObvijevanPos() != 0) {// si il y a déjà un obvi
SocketManager.GAME_SEND_BN(_perso);
return;
}


exObj.setObvijevanPos(obj.getObvijevanPos()); // L'objet qui était en place a maintenant un obvi

_perso.removeItem(obj.getGuid(), 1, false, false); // on enlève l'existance de l'obvi en lui-même
SocketManager.send(_perso, "OR" + obj.getGuid()); // on le précise au client

StringBuilder cibleNewStats = new StringBuilder();
cibleNewStats.append(obj.parseStatsStringSansUserObvi()).append(",").append(exObj.parseStatsStringSansUserObvi());
cibleNewStats.append(",3ca#").append(Integer.toHexString(objGUID)).append("#0#0#0d0+").append(objGUID);
exObj.clearStats();
exObj.parseStringToStats(cibleNewStats.toString());

SocketManager.send(_perso, exObj.obvijevanOCO_Packet(pos));

if ((objGUID == 9233) || (objGUID == 9234)) 
SocketManager.GAME_SEND_ON_EQUIP_ITEM(_perso.get_curCarte(), _perso); // Si l'obvi était cape ou coiffe : packet au client
// S'il y avait plusieurs objets
if(obj.getQuantity() > 1)
{
if(qua > obj.getQuantity())
qua = obj.getQuantity();

if(obj.getQuantity() - qua > 0)//Si il en reste
{
int newItemQua = obj.getQuantity()-qua;
Objet newItem = Objet.getCloneObjet(obj,newItemQua);
_perso.addObjet(newItem,false);
World.addObjet(newItem,true);
obj.setQuantity(qua);
SocketManager.GAME_SEND_OBJECT_QUANTITY_PACKET(_perso, obj);
}
}

return;
 

cherchez :

 

public void addAction(GameAction GA)
 

rajouter au dessous :

 

private void Object_obvijevan_changeApparence(String packet)
{
int guid = -1;
int pos = -1;
int val = -1;
try
{
guid = Integer.parseInt(packet.substring(2).split("\\|")[0]);
pos = Integer.parseInt(packet.split("\\|")[1]);
val = Integer.parseInt(packet.split("\\|")[2]); } catch (Exception e) {
return;
}if ((guid == -1) || (!_perso.hasItemGuid(guid))) return;
Objet obj = World.getObjet(guid);
if ((val >= 21) || (val <= 0)) return;

obj.obvijevanChangeStat(972, val);
SocketManager.send(_perso, obj.obvijevanOCO_Packet(pos));
if (pos != -1) SocketManager.GAME_SEND_ON_EQUIP_ITEM(_perso.get_curCarte(), _perso);
}
private void Object_obvijevan_feed(String packet)
{
int guid = -1;
int pos = -1;
int victime = -1;
try
{
guid = Integer.parseInt(packet.substring(2).split("\\|")[0]);
pos = Integer.parseInt(packet.split("\\|")[1]);
victime = Integer.parseInt(packet.split("\\|")[2]);
} catch (Exception e) {return;}

if ((guid == -1) || (!_perso.hasItemGuid(guid)))
return;
Objet obj = World.getObjet(guid);
Objet objVictime = World.getObjet(victime);
obj.obvijevanNourir(objVictime);

int qua = objVictime.getQuantity();
if (qua <= 1)
{
_perso.removeItem(objVictime.getGuid());
SocketManager.GAME_SEND_REMOVE_ITEM_PACKET(_perso, objVictime.getGuid());
} else {
objVictime.setQuantity(qua - 1);
SocketManager.GAME_SEND_OBJECT_QUANTITY_PACKET(_perso, objVictime);
}
SocketManager.send(_perso, obj.obvijevanOCO_Packet(pos));
}

private void Object_obvijevan_desassocier(String packet)
{
int guid = -1;
int pos = -1;
try
{
guid = Integer.parseInt(packet.substring(2).split("\\|")[0]);
pos = Integer.parseInt(packet.split("\\|")[1]); } catch (Exception e) {
return;
}if ((guid == -1) || (!_perso.hasItemGuid(guid))) return;
Objet obj = World.getObjet(guid);
int idOBVI = 0;

switch (obj.getTemplate().getType())
{
case 1:
idOBVI = 9255;
break;
case 9:
idOBVI = 9256;
break;
case 16:
idOBVI = 9234;
break;
case 17:
idOBVI = 9233;
break;
default:
SocketManager.GAME_SEND_MESSAGE(_perso, "Erreur d'obvijevan numero: 4. Merci de nous le signaler si le probleme est grave.", "000000");
return;
}
Objet.ObjTemplate t = World.getObjTemplate(idOBVI);
Objet obV = t.createNewItem(1, true);
String obviStats = obj.getObvijevanStatsOnly();
if (obviStats == "") {
SocketManager.GAME_SEND_MESSAGE(_perso, "Erreur d'obvijevan numero: 3. Merci de nous le signaler si le probleme est grave.", "000000");
return;
}
obV.clearStats();
obV.parseStringToStats(obviStats);
if (_perso.addObjet(obV, true)) {
World.addObjet(obV, true);
}
obj.removeAllObvijevanStats();
SocketManager.send(_perso, obj.obvijevanOCO_Packet(pos));
SocketManager.GAME_SEND_ON_EQUIP_ITEM(_perso.get_curCarte(), _perso);
}
 

 

 

Allez dans objet.java et cherchez:

public void addAction(Action A)
 

et rajoutez au dessus :

public int get_obviType() {
try {
for (String sts : StrTemplate.split(",")) {
String[] stats = sts.split("#");
int statID = Integer.parseInt(stats[0], 16);
if (statID == 973) {
return Integer.parseInt(stats[3], 16);
}
}
} catch (Exception e) {
GameServer.addToLog(e.getMessage());
return Constants.ITEM_TYPE_OBJET_VIVANT;
}
return Constants.ITEM_TYPE_OBJET_VIVANT; //Si erreur on retourne le type de base
}
[/quote]
chercher :
[quote]
protected int guid;
 

et juste dessous ajoutez :

protected int obvijevan; protected int obvijevanLook;

 

 

cherchez :

 

public Objet()[/quote] et rajoute juste au dessous :

Citation

public int getObvijevanPos() { return obvijevan;

}

 
public void setObvijevanPos(int pos) {
obvijevan = pos;

}
public int getObvijevanLook() {
return obvijevanLook;
}

public void setObvijevanLook(int look) {
obvijevanLook = look;
}
 

 

cherchez :

this.Effects = effects;
et rajouter dessous : 
[quote]
this.obvijevan = 0;
this.obvijevanLook = 0;
 

 

 

recherchez :

for(Entry entry : Stats.getMap().entrySet())
 

 

remplacez par :

for(Entry entry : Stats.getMap().entrySet())
{
if(!isFirst)
stats.append(",");
int statID = ((Integer)entry.getKey()).intValue();

if ((statID == 970) || (statID == 971) || (statID == 972) || (statID == 973) || (statID == 974))
{
int jet = ((Integer)entry.getValue()).intValue();
if ((statID == 974) || (statID == 972) || (statID == 970))
stats.append(Integer.toHexString(statID)).append("#0#0#").append(Integer.toHexString(jet));
else {
stats.append(Integer.toHexString(statID)).append("#0#0#").append(jet);
}
if (statID == 973) setObvijevanPos(jet);
if (statID == 972) setObvijevanLook(jet); 
}
else {
String jet = "0d0+" + entry.getValue();
stats.append(Integer.toHexString(statID)).append("#");
stats.append(Integer.toHexString(((Integer)entry.getValue()).intValue())).append("#0#0#").append(jet);
}

isFirst = false;
}
 

 

recherchez :

 

return stats.toString();
 

et dessous rajouter :

public String parseStatsStringSansUserObvi()
{
if(getTemplate().getType() == 83)//Si c'est une pierre d'âme vide
return getTemplate().getStrTemplate();

StringBuilder stats = new StringBuilder();
boolean isFirst = true;
for(SpellEffect SE : Effects)
{
if(!isFirst)
stats.append(",");

String[] infos = SE.getArgs().split(";");
try
{
stats.append(Integer.toHexString(SE.getEffectID())).append("#").append(infos[0]).append("#").append(infos[1]).append("#0#").append(infos[5]);
}catch(Exception e)
{
e.printStackTrace();
continue;
};

isFirst = false;
}
 

 

 

ensuite, plus bas rajoutez :

 

public String parseToSave()
{
return parseStatsStringSansUserObvi();
}

public String obvijevanOCO_Packet(int pos)
{
String strPos = String.valueOf(pos);
if (pos == -1) strPos = "";
String upPacket = "OCO";
upPacket = upPacket + Integer.toHexString(getGuid()) + "~";
upPacket = upPacket + Integer.toHexString(getTemplate().getID()) + "~";
upPacket = upPacket + Integer.toHexString(getQuantity()) + "~";
upPacket = upPacket + strPos + "~";
upPacket = upPacket + parseStatsString();
return upPacket;
}

public void obvijevanNourir(Objet obj) {
if (obj == null)
return;
for (Map.Entry entry : Stats.getMap().entrySet())
{
if (entry.getKey().intValue() != 974) // on ne boost que la stat de l'expérience de l'obvi
continue;
if (entry.getValue().intValue() > 500) // si le boost a une valeur supérieure à 500 (irréaliste)
return;
entry.setValue(Integer.valueOf(entry.getValue().intValue() + obj.getTemplate().getLevel() / 32)); // valeur d'origine + ObjLvl / 32
// s'il mange un obvi, on récupère son expérience
if (obj.getTemplate().getID() == getTemplate().getID()) {
for(Map.Entry ent : obj.getStats().getMap().entrySet()) {
if (entry.getKey().intValue() != 974) // on ne considère que la stat de l'expérience de l'obvi
continue; 
entry.setValue(Integer.valueOf(entry.getValue().intValue() + Integer.valueOf(ent.getValue().intValue())));
}
}
}
}

public void obvijevanChangeStat(int statID, int val)
{
for (Map.Entry entry : Stats.getMap().entrySet())
{
if (((Integer)entry.getKey()).intValue() != statID) continue; entry.setValue(Integer.valueOf(val));
}
}

public void removeAllObvijevanStats() {
setObvijevanPos(0);
Personnage.Stats StatsSansObvi = new Personnage.Stats();
for (Map.Entry entry : Stats.getMap().entrySet())
{
int statID = ((Integer)entry.getKey()).intValue();
if ((statID == 970) || (statID == 971) || (statID == 972) || (statID == 973) || (statID == 974))
continue;
StatsSansObvi.addOneStat(statID, ((Integer)entry.getValue()).intValue());
}
Stats = StatsSansObvi;
}

public void removeAll_ExepteObvijevanStats()
{
setObvijevanPos(0);
Personnage.Stats StatsSansObvi = new Personnage.Stats();
for (Map.Entry entry : Stats.getMap().entrySet())
{
int statID = ((Integer)entry.getKey()).intValue();
if ((statID != 971) && (statID != 972) && (statID != 973) && (statID != 974))
continue;
StatsSansObvi.addOneStat(statID, ((Integer)entry.getValue()).intValue());
}
Stats = StatsSansObvi;
}

public String getObvijevanStatsOnly()
{
Objet obj = getCloneObjet(this, 1);
obj.removeAll_ExepteObvijevanStats();
return obj.parseStatsStringSansUserObvi();
}
 

 

 

Allez dans personnage.java et cherchez :

 public String getGMStuffString()
 

 

remplacez tout son contenu par :

 

public String getGMStuffString()
{
StringBuilder str = new StringBuilder();
// pour chaque place d'objet apparent, en Hexa, l'ID de l'objet
// 2411 pour la Cape Objivejan (9233)
// 2412 pour la Coiffe Objivejan (9234)
if(getObjetByPos(Constants.ITEM_POS_ARME) != null)
str.append(Integer.toHexString(getObjetByPos(Constants.ITEM_POS_ARME).getTemplate().getID()));
str.append(",");
if(getObjetByPos(Constants.ITEM_POS_COIFFE) != null) {
if(getObjetByPos(Constants.ITEM_POS_COIFFE).getObvijevanPos() != 10)
str.append(Integer.toHexString(getObjetByPos(Constants.ITEM_POS_COIFFE).getTemplate().getID())); 
else str.append("2412~16~").append(getObjetByPos(Constants.ITEM_POS_COIFFE).getObvijevanLook());
}
str.append(",");
if(getObjetByPos(Constants.ITEM_POS_CAPE) != null) {
if(getObjetByPos(Constants.ITEM_POS_CAPE).getObvijevanPos() != 11)
str.append(Integer.toHexString(getObjetByPos(Constants.ITEM_POS_CAPE).getTemplate().getID())); 
else str.append("2411~17~").append(getObjetByPos(Constants.ITEM_POS_CAPE).getObvijevanLook());
}
str.append(",");
if(getObjetByPos(Constants.ITEM_POS_FAMILIER) != null)
str.append(Integer.toHexString(getObjetByPos(Constants.ITEM_POS_FAMILIER).getTemplate().getID()));
str.append(",");
if(getObjetByPos(Constants.ITEM_POS_BOUCLIER) != null)
str.append(Integer.toHexString(getObjetByPos(Constants.ITEM_POS_BOUCLIER).getTemplate().getID()));
return str.toString();
 

 

 

Je suis vraiment désolé pour les fautes, et vraiment tuto pas très clair, mais si vous avez besoin d'aide mp moi.

 

Tutoriel reformaté et corrigé par Que-rel-ler

  • J'adore 4
Lien vers le commentaire
  • 6 years later...

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant


  • Flux d'Activité

    1. 5

      Metin2 Download - Migration

    2. 0

      C++ Wiki Ingame

    3. 38

      Installer Ancestra Remake 54

    4. 2

      Ajouter une Commande Lau

    5. 2

      Ajouter une Commande Lau

    6. 2

      Ajouter une Commande Lau

    7. 38

      Installer Ancestra Remake 54

    8. 5

      Metin2 Download - Migration

    9. 3

      L'E3 2021, on en parle !

  • En ligne récemment

    Aucun utilisateur enregistré regarde cette page.

×
×
  • Créer...

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.