CONTINUEWoodcutting Improved UPDATESegundo GRAN UPDATE fue hecho el dia de ayer (6/14/11).
Mejorar Woodcutting con las siguientes especificaciones:
1. Animaciones correctas al cortar los arboles.
2. El arbol en algun tiempo se desaparecera y quedar el tronco (tree stump) y luego volvera a aparecer.
3. Dependiendo el acha que tengas se tardara menos o mas en cortar el arbol y sacar un log.Por que este update?, Sera mas dificil sacar 99 woodcutting?
RESPUESTA:
Nosotros queremos que si sea mas dificil sacar 99 woodcutting, si tomara tiempo y dedicacion, ya que tardaras en sacar 99 woodcutting, hemos decidido subir los precios de los logs y agregar las diferentes hatchets para que no haya problema (Dragon Hatchet sera agregada al server lo mas rapido posible).
Ademas queremos que el server este mas dificil, para que atraiga a la gente, porque la mayoria de los servidores privados de runescape (RSPS) haces comandos de ::master y dan todas las skills 99, eso no es divertido.IMAGEN DE WOODCUTTING UPDATEQue hicimos para este "GRAN UPDATE"?
Simplemente dedicacion y unas 2 horas de arduo trabajo
(Gracias Mod AMC por ayudarme)
Primero tuve que programar todo el asunto de las achas que jalen, la animacion correcta, los arboles, la XP por cada arbol, etc... He aqui el codigo:
package server.model.players.skills;
import server.model.players.*;
import server.Config;
import server.util.Misc;
import server.Server;
import server.model.players.Client;
import server.model.players.PacketType;
import server.model.objects.Object;
import server.model.players.PlayerHandler;
/**
* @author Sanity
* @note Heavily modified by Sponge Bob || AMC
*/
public class Woodcutting {
Client c;
private final int VALID_AXE[] = {1351,1349,1353,1361,1355,1357,1359,6739};
private final int[] AXE_REQS = {1,1,6,6,21,31,41,61};
private int logType;
private int exp;
private int levelReq;
private int axeType;
private int treeX;
private int treeY;
private int density;
private int treeType;
public static int TREE_TIMER = 2000;
public Woodcutting(Client c) {
this.c = c;
}
public void startWoodcutting(int logType, int levelReq, int exp, int treeX, int treeY, int density, int treeType) {
if (goodAxe() > 0) {
c.turnPlayerTo(treeX, treeY);
if (c.playerLevel[c.playerWoodcutting] >= levelReq) {
this.logType = logType;
this.exp = exp;
this.levelReq = levelReq;
this.treeX = treeX;
this.treeY = treeY;
this.density = density;
this.treeType = treeType;
this.axeType = goodAxe();
c.wcTimer = getWcTimer(density);
c.startAnimation(getWcEmote());
} else {
c.getPA().resetVariables();
c.startAnimation(65535);
c.sendMessage("You need a woodcutting level of " + levelReq + " to cut this tree.");
}
} else {
c.startAnimation(65535);
c.sendMessage("You don't have an axe for which you have the level to use.");
c.getPA().resetVariables();
}
}
public void resetWoodcut() {
this.logType = -1;
this.exp = -1;
this.levelReq = -1;
this.axeType = -1;
this.density = -1;
this.treeX = -1;
this.treeY = -1;
this.treeType = -1;
c.wcTimer = -1;
}
public int getWcEmote() {
if (c.playerEquipment[c.playerWeapon] == 1351) // bronze
return 879;
if (c.playerEquipment[c.playerWeapon] == 1349) // iron
return 877;
if (c.playerEquipment[c.playerWeapon] == 1353) // steel
return 875;
if (c.playerEquipment[c.playerWeapon] == 1355) // mith
return 871;
if (c.playerEquipment[c.playerWeapon] == 1357) // addy
return 869;
if (c.playerEquipment[c.playerWeapon] == 1359) // rune
return 867;
if (c.playerEquipment[c.playerWeapon] == 6739) // d axe
return 2846;
if (c.playerEquipment[c.playerWeapon] == 1361) // black
return 873;
else
return 0;
}
public void cutWood() {
int cutorchop = Misc.random(cutForChop(treeType));
if (cutorchop > 0) {
if (c.getItems().addItem(logType,1)) {
c.startAnimation(getWcEmote());
c.sendMessage("You get some logs.");
c.getPA().addSkillXP(exp * Config.WOODCUTTING_EXPERIENCE, c.playerWoodcutting);
c.getPA().refreshSkill(c.playerWoodcutting);
c.wcTimer = getWcTimer(density);
} else {
c.getPA().resetVariables();
return;
}
} else {
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
Client c2 = (Client)Server.playerHandler.players[j];
//c2.getPA().object(-1, treeX, treeY, 0, 10); // first it deletes the tree
//c2.getPA().object(1343, treeX, treeY, 0, 10); // then it adds the stump
new Object(1343, treeX, treeY, 0, 1, 10, treeType, getTicksForTree());
c.getPA().resetVariables();
resetWoodcut();
}
}
return;
}
}
public int getTicksForTree() {
return (2000-PlayerHandler.getPlayerCount())/100;
}
/*public void respawnTree() {
for (int j = 0; j < Server.playerHandler.players.length; j++) {
if (Server.playerHandler.players[j] != null) {
Client c2 = (Client)Server.playerHandler.players[j];
c2.getPA().object(-1, treeX, treeY, 0, 10); // delete the stump
c2.getPA().object(treeType, treeX, treeY, 0, 10); // re-add the tree
c.getPA().resetVariables();
resetWoodcut();
}
}
}*/
public int cutForChop(int tree) {
if (tree == 1276 || tree == 1278)
return 3;
if (tree == 1281)
return 5;
if (tree == 1308)
return 6;
if (tree == 1307)
return 7;
if (tree == 1309)
return 8;
if (tree == 1306)
return 10;
else
return 0;
}
public int axePower(int axe) {
if (axe == 1351) // bronze
return 1;
if (axe == 1349) // iron
return 1;
if (axe == 1353) // steel
return 2;
if (axe == 1361) // black
return 2;
if (axe == 1355) // mith
return 3;
if (axe == 1357) // addy
return 4;
if (axe == 1359) // rune
return 5;
if (axe == 6739) //daxe
return 7;
else
return 0;
}
public int goodAxe() {
for (int j = VALID_AXE.length - 1; j >= 0; j--) {
if (c.playerEquipment[c.playerWeapon] == VALID_AXE[j]) {
if (c.playerLevel[c.playerWoodcutting] >= AXE_REQS[j])
return VALID_AXE[j];
}
}
for (int i = 0; i < c.playerItems.length; i++) {
for (int j = VALID_AXE.length - 1; j >= 0; j--) {
if (c.playerItems[i] == VALID_AXE[j] + 1) {
if (c.playerLevel[c.playerWoodcutting] >= AXE_REQS[j])
return VALID_AXE[j];
}
}
}
return - 1;
}
public int getWcTimer(int density) {
int time = Misc.random(2);
return density + time - axePower(goodAxe());
}
}
Despues de aber agregado toda la informacion acerca de la skill era hora de activar los botones, osea: Picarle al arbol, hara que el avatar comienze a cortar el arbol, y recivir tal log. Para hacer esto tuve que modificar el archivo:
ActionHandler.javaLuego despues de averlo modificado tuvimos que hacer que las variables concuerden con las acciones que pusimos que isiera, para eso modificamos el archivo:
Player.javaEso es todo por ahora amigos!