diff --git a/scripts/commands/abandonquest.py b/scripts/commands/abandonquest.py index 5a3b4d1c..9e7c44a4 100644 --- a/scripts/commands/abandonquest.py +++ b/scripts/commands/abandonquest.py @@ -4,5 +4,22 @@ def setup(): return def run(core, actor, target, commandString): - print ('abandonQuest: ' + commandString) - return + # commandString = 0 quest/quest_name + + player = actor.getPlayerObject() + + if player is None: + return + + questName = commandString.split("quest/")[1] + + quest = player.getQuest(questName) + + if quest is None: + return + + if quest.isCompleted(): + return + + player.removeQuest(questName) + return \ No newline at end of file diff --git a/src/protocol/swg/ObjControllerMessage.java b/src/protocol/swg/ObjControllerMessage.java index 580318e0..be316087 100644 --- a/src/protocol/swg/ObjControllerMessage.java +++ b/src/protocol/swg/ObjControllerMessage.java @@ -82,6 +82,7 @@ public class ObjControllerMessage extends SWGMessage { public static final int QUEST_TASK_TIMER = 0x0444; public static final int FORCE_ACTIVATE_QUEST = 0x04BE; public static final int SHOW_QUEST_COMPLETION_WINDOW = 0x04B8; + public static final int SHOW_QUEST_ACCEPT_WINDOW = 0x04B7; public ObjControllerMessage() { diff --git a/src/protocol/swg/objectControllerObjects/ShowQuestAcceptWindow.java b/src/protocol/swg/objectControllerObjects/ShowQuestAcceptWindow.java new file mode 100644 index 00000000..9fb2d7dc --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/ShowQuestAcceptWindow.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import engine.resources.objects.Baseline; + +public class ShowQuestAcceptWindow extends ObjControllerObject { + + private long objectId; + private int questCrc; + + public ShowQuestAcceptWindow(long objectId, int questCrc) { + this.objectId = objectId; + this.questCrc = questCrc; + } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = Baseline.createBuffer(20); + + buffer.putInt(ObjControllerMessage.SHOW_QUEST_COMPLETION_WINDOW); + buffer.putLong(objectId); + buffer.putInt(0); + + buffer.putInt(questCrc); + + return buffer.flip(); + } + +} diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index e0270319..f0729a04 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -623,6 +623,10 @@ public class PlayerObject extends IntangibleObject implements Serializable { return getQuestJournal().get(questCrc); } + public void removeQuest(String questName) { + getQuestJournal().remove(CRC.StringtoCRC("quest/" + questName)); + } + public String getProfessionWheelPosition() { return (String) getBaseline(8).get("professionWheelPosition"); } @@ -1048,20 +1052,11 @@ public class PlayerObject extends IntangibleObject implements Serializable { public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { switch (viewType) { - case 3: case 6: if (getContainer() != null) { getContainer().notifyObservers(getBaseline(viewType).createDelta(updateType, buffer.array()), true); } - break; - case 8: - switch (updateType) { - case 7: - IoBuffer newBuffer = getBaseline(viewType).createDelta(updateType, buffer.array()); - getContainer().getClient().getSession().write(newBuffer.array()); - break; - } break; default: if (getContainer() != null && getContainer().getClient() != null) { diff --git a/src/services/AdminService.java b/src/services/AdminService.java index f6558217..31c125b9 100644 --- a/src/services/AdminService.java +++ b/src/services/AdminService.java @@ -44,7 +44,7 @@ public class AdminService implements INetworkDispatch { PreparedStatement preparedStatement; try { - preparedStatement = core.getDatabase1().preparedStatement("SELECT accessLevel FROM accounts WHERE id=" + id); + preparedStatement = core.getDatabase1().preparedStatement("SELECT \"accessLevel\" FROM accounts WHERE id=" + id); ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()) accessLevel = resultSet.getString("accessLevel"); diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 0c02f0ba..78be6653 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -422,7 +422,8 @@ public class CharacterService implements INetworkDispatch { if (isDuplicate) { return true; } //FIXME: this is a bit lazy... but it's only temporary :p - PreparedStatement psc = databaseConnection.preparedStatement("SELECT COUNT(*) FROM pg_tables WHERE \"tablename\"=?"); + // FIXME: org.postgresql.util.PSQLException: ERROR: relation "temp_reserved_char_names" does not exist + /*PreparedStatement psc = databaseConnection.preparedStatement("SELECT COUNT(*) FROM pg_tables WHERE \"tablename\"=?"); psc.setString(1, "temp_reserved_char_names"); ResultSet resultSetC = psc.executeQuery(); boolean tableExists = resultSetC.next(); @@ -434,9 +435,9 @@ public class CharacterService implements INetworkDispatch { ps2.setString(2, firstName.toLowerCase()); ResultSet resultSet2 = ps2.executeQuery(); boolean isReserved = resultSet2.next(); - resultSet2.getStatement().close(); + resultSet2.getStatement().close();*/ - return isReserved; + return isDuplicate; } diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 7177d03c..eedb1396 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -128,12 +128,12 @@ public class ConnectionService implements INetworkDispatch { try { - preparedStatement = databaseConnection.preparedStatement("SELECT accountId FROM sessions WHERE key=?"); + preparedStatement = databaseConnection.preparedStatement("SELECT \"accountId\" FROM sessions WHERE key=?"); preparedStatement.setBytes(1, clientIdMsg.getSessionKey()); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { - long accountId = resultSet.getLong("accountID"); + long accountId = resultSet.getLong("accountId"); client.setAccountId(accountId); client.setSessionKey(clientIdMsg.getSessionKey()); diff --git a/src/services/quest/QuestService.java b/src/services/quest/QuestService.java index 3e143d87..b1ae0c61 100644 --- a/src/services/quest/QuestService.java +++ b/src/services/quest/QuestService.java @@ -49,6 +49,7 @@ import protocol.swg.objectControllerObjects.ForceActivateQuest; import protocol.swg.objectControllerObjects.QuestTaskCounterMessage; import protocol.swg.objectControllerObjects.QuestTaskTimerMessage; import protocol.swg.objectControllerObjects.ShowLootBox; +import protocol.swg.objectControllerObjects.ShowQuestAcceptWindow; import protocol.swg.objectControllerObjects.ShowQuestCompletionWindow; import resources.common.Console; import resources.common.ObjControllerOpcodes; @@ -263,8 +264,8 @@ public class QuestService implements INetworkDispatch { QuestTask task = qData.getTasks().get(activeStep); - //if (quest.getWaypointId() != 0) - //core.objectService.destroyObject(quest.getWaypointId()); + if (quest.getWaypointId() != 0) + core.objectService.destroyObject(quest.getWaypointId()); if (quest.getTimer() != null) quest.getTimer().cancel(true); @@ -408,8 +409,9 @@ public class QuestService implements INetworkDispatch { creo.getClient().getSession().write(player.getBaseline(8).createDelta(7)); } - public void sendQuestAcceptWindow(CreatureObject reciever, String questName) { - + public void sendQuestAcceptWindow(CreatureObject reciever, int questCrc) { + ObjControllerMessage objController = new ObjControllerMessage(0x0B, new ShowQuestAcceptWindow(reciever.getObjectID(), questCrc)); + reciever.getClient().getSession().write(objController.serialize()); } public void sendQuestCompleteWindow(CreatureObject reciever, int questCrc) {