laber33

 tutoriel / partage [JAVA] Ajouter les obvijevans sur son ému

Recommended Posts

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

  • Like 4

Share this post


Link to post
Share on other sites