Gatsby 269 Опубликовано 29 ноября, 2014 В общем имеется бафер с профилями на питоне. import sys from ru.catssoftware.sql import DatabaseFactory from ru.catssoftware.gameserver.model.quest import State from ru.catssoftware.gameserver.model.quest import QuestState from ru.catssoftware.gameserver.model.quest.jython import QuestJython as JQuest from ru.catssoftware.gameserver.model.actor.instance import L2PcInstance from ru.catssoftware.gameserver.model import L2Skill from java.util import Iterator from ru.catssoftware.gameserver.datatables import SkillTable qn = "1247_buffer" NPC = [40002] ACCEPT_BUFF = [1040, 1068, 1035, 1043, 1044, 1397, 1303, 1257, 1304, 1077, 1078, 1085, 1311, 1032, 1036, 1045, 1048, 4352, 4357, 4391, 4403, 4405, 1243, 1388, 1389, 1087, 1259, 1059, 1268, 1062, 1242, 1240, 1086, 1204, 1363] ACCEPT_DANCES = [271, 272, 273, 274, 275, 276, 277, 307, 309, 310, 311, 365] ACCEPT_SONGS = [364, 264, 306, 269, 270, 265, 363, 349, 308, 305, 304, 267, 266, 268] ACCEPT_CHANTS = [1251, 1252, 1253, 1284, 1006, 1007, 1009, 1362, 1310, 1309, 1308, 1391, 1390] ACCEPT_SPECIAL = [1364, 1356, 1355, 1357, 1413, 4702, 4703, 4700, 4699, 1323] ACCEPT_RESISTS = [1393, 1392, 1182, 1189, 1191, 1352, 1353, 1073, 1354, 1033] QuestId = -1 QuestName = "Buffer" QuestDesc = "custom" print qn + "Buffer 1247 Loaded..." class Quest (JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def onEvent(self, event, st): htmltext = "Sory, failed Event" ownerid = st.getPlayer().getObjectId() effects = st.getPlayer().getAllEffects() if event.startswith("page_") : page = int(event.replace("page_", "")) htmltext = str(page) + ".htm" elif event == "cancel" : st.getPlayer().stopAllEffects() htmltext = "1.htm" activePage = 1 elif event == "heal": st.playSound("ItemSound.quest_middle") st.getPlayer().getStatus().setCurrentHp(st.getPlayer().getMaxHp()) st.getPlayer().getStatus().setCurrentMp(st.getPlayer().getMaxMp()) st.getPlayer().getStatus().setCurrentCp(st.getPlayer().getMaxCp()) return "1.htm" st.setState(State.COMPLETED) elif event == "fulmage": st.playSound("ItemSound.quest_middle") SkillTable.getInstance().getInfo(1085,3).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1059,3).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1078,6).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1204,2).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1048,6).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1397,3).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1303,2).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1040,3).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1035,4).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1062,2).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(273,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(276,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(4703,13).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(349,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(268,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(363,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(365,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1413,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1036,2).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1389,3).getEffects(st.getPlayer(),st.getPlayer()) return "1.htm" st.setState(State.COMPLETED) elif event == "fulvoin": st.playSound("ItemSound.quest_middle") SkillTable.getInstance().getInfo(1068,3).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1040,3).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1086,2).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1204,2).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1077,3).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1242,2).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1268,4).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1035,4).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1036,2).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1045,6).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1388,3).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(1363,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(271,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(275,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(274,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(269,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(264,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(268,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(304,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(364,1).getEffects(st.getPlayer(),st.getPlayer()) return "1.htm" st.setState(State.COMPLETED) elif event == "alldance": SkillTable.getInstance().getInfo(274,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(277,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(272,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(273,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(276,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(271,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(275,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(309,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(311,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(307,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(310,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(365,1).getEffects(st.getPlayer(),st.getPlayer()) return "1.htm" st.setState(State.COMPLETED) elif event == "flu": SkillTable.getInstance().getInfo(4553,4).getEffects(st.getPlayer(),st.getPlayer()) return "1.htm" st.setState(State.COMPLETED) elif event == "malaria": SkillTable.getInstance().getInfo(4554,4).getEffects(st.getPlayer(),st.getPlayer()) return "1.htm" st.setState(State.COMPLETED) elif event == "allsong": SkillTable.getInstance().getInfo(267,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(270,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(268,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(269,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(265,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(264,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(266,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(306,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(304,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(308,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(305,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(363,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(349,1).getEffects(st.getPlayer(),st.getPlayer()) SkillTable.getInstance().getInfo(364,1).getEffects(st.getPlayer(),st.getPlayer()) return "1.htm" st.setState(State.COMPLETED) elif event.startswith("buff_") : id_lvl = event.replace("buff_", "") id_lvl = id_lvl.split("_") SkillTable.getInstance().getInfo(int(id_lvl[0]), int(id_lvl[1])).getEffects(st.getPlayer(), st.getPlayer()) htmltext = str(int(id_lvl[2])) + ".htm" elif event.startswith("profile_") : act = event.replace("profile_", "") con = DatabaseFactory.getInstance().getConnection() if act.startswith("buff_") : act = str(int(act.replace("buff_", ""))) sql = con.prepareStatement("SELECT * FROM profile_buff WHERE char_id = ? AND pindex = ?") sql.setInt(1, int(ownerid)) sql.setInt(2, int(act)) rs = sql.executeQuery() rs.next() full_buffs = rs.getString("skills").split(";") sql.close() rs.close() for buff in full_buffs : if buff != "" : buff = buff.split(",") SkillTable.getInstance().getInfo(int(buff[0]), int(buff[1])).getEffects(st.getPlayer(), st.getPlayer()) htmltext = "1.htm" elif act.startswith("save_") : act = str(int(act.replace("save_", ""))) sqll = con.prepareStatement("DELETE FROM profile_buff WHERE char_id = ? AND pindex = ?") sqll.setInt(1, int(ownerid)) sqll.setInt(2, int(act)) sqll.execute() sqll.close() saving = "++" for eff in effects : eff_id = eff.getSkill().getId() eff_level = eff.getSkill().getLevel() if saving == "++" : if (eff_id in ACCEPT_BUFF or eff_id in ACCEPT_DANCES or eff_id in ACCEPT_SONGS or eff_id in ACCEPT_CHANTS or eff_id in ACCEPT_SPECIAL or eff_id in ACCEPT_RESISTS) : saving = str(eff_id) + "," + str(eff_level) + ";" else : if (eff_id in ACCEPT_BUFF or eff_id in ACCEPT_DANCES or eff_id in ACCEPT_SONGS or eff_id in ACCEPT_CHANTS or eff_id in ACCEPT_SPECIAL or eff_id in ACCEPT_RESISTS) : saving += str(eff_id) + "," + str(eff_level) + ";" sql = con.prepareStatement("INSERT INTO profile_buff (char_id, pindex, skills) VALUES ('" + str(ownerid) + "', '" + str(act) + "', '" + saving + "')") sql.execute() sql.close() htmltext = "1.htm" con.close() return htmltext def onTalk (self, npc, player): htmltext = "1.htm" st = player.getQuestState(qn) if not st : return htmltext npcId = npc.getNpcId() return htmltext QUEST = Quest(1247,qn,"custom") QUEST.addStartNpc(40002) QUEST.addTalkId(40002) При нажатии на профиль, на который предварительно не сохранили баф. ГС выдает это. [29.11.14 03:07:06] C:\SERVERL2\game\data\scripts\custom\1247_buffer\__init__.py Traceback (innermost last): (no code object) at line 0 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1086) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:851) at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5769) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5689) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5729) at com.zaxxer.hikari.proxy.ResultSetJavassistProxy.getString(ResultSetJavassistProxy.java) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) java.sql.SQLException: java.sql.SQLException: Illegal operation on empty result set. at org.python.core.Py.JavaError(Unknown Source) at org.python.core.PyObject._jthrow(Unknown Source) at org.python.core.PyObject._jcall(Unknown Source) at org.python.proxies.main$Quest$13.onEvent(Unknown Source) at ru.catssoftware.gameserver.model.quest.Quest.onAdvEvent(Quest.java:667) at ru.catssoftware.gameserver.model.quest.Quest.notifyEvent(Quest.java:490) at ru.catssoftware.gameserver.model.actor.instance.L2PcInstance.processQuestEvent(L2PcInstance.java:1164) at ru.catssoftware.gameserver.network.clientpackets.RequestBypassToServer.runImpl(RequestBypassToServer.java:225) at ru.catssoftware.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:69) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Нужно реализовать вывод ошибки html в игре что мол профиль пустой, сначала сохраните баф. Подскажите как это сделать, или сделайте, дам на пиво. Код бафера с подсветкой синтаксиса 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Ancient 7 Опубликовано 29 ноября, 2014 Попробуй добавить проверку на сохраненный набор. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gatsby 269 Опубликовано 29 ноября, 2014 (изменено) Попробуй добавить проверку на сохраненный набор. Знал бы как добавил бы... Ну судя по всему так if not rs.next(): rs.close() sql.close() return "<html><body>sohrani profil shletcik</body></html>" Как посоветовал капитошка, но не черта не выходит, с этими отступами хрен*выми. Я хз где их ставить. Изменено 29 ноября, 2014 пользователем Gatsby Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
KotBegemot 268 Опубликовано 29 ноября, 2014 return "noprofile.htm" попробуй так Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты