Nieoficjalna polska strona Lineage 2

Lineage 2 => Prowadzenie własnego serwera => Serwery prywatne => Poradniki => Wątek zaczęty przez: Maślan w Kwiecień 12, 2008, 11:00:52 am

Tytuł: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 12, 2008, 11:00:52 am
1. Html

Tworzymy plik html.

W nim piszemy coś takiego:
Cytuj
<html><title>Buffer</title>
<body>
<br>
<br>
Jakiś tekst
<br>
<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32 align=left>
<center>
<table border="0" cellspacing="0">

   <tr>
   <td valign=top><img src=icon.skill1240 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1087 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1010 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1036 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1243 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1033 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1303 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1035 width=32 height=32 align=left></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1032 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1048 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1078 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1085 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1059 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1352 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1259 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1393 width=32 height=32 align=left></td>
   </tr>
   
</table>
<br>
<img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32 align=left>
<td><button value="Buff Me" action="bypass -h npc_%objectId%_Quest 9999_NPCBuffer" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
<br>
</body>
</center>
</html>


zapisujemy pod nazwą 40010.htm
2. Plik pythona:

Otwieramy notatnik i dodajemy takie linijki:
Cytuj
import sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from net.sf.l2j.gameserver.datatables import SkillTable
from net.sf.l2j                import L2DatabaseFactory
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
Dzięki nim buffer może nas buffnąc. :P

Następnie dodajemy taką linijkę:
Cytuj
qn = "9999_NPCBuffer"
Jak sam pozątek wskazuje qn = quest name czyli nazwa questu :)

Cytuj
NPC=[40010]
ta linijka mówi nam do jakiego NPC sie odnosi
Cytuj
ADENA_ID=57
- tu podajemy ID adeny - można również dac inne ID za które buffer będzie buffował :)
Cytuj
QuestId     = 9999
- ID questu (Tu nic nie zmieniamy)
Cytuj
QuestName   = "NPCBuffer"
nie musze pisac
Cytuj
QuestDesc   = "custom"

Cytuj
print "importing custom: 9999: NPCBuffer"
- to akurat jest mało ważne - odpowiada za wyświetlanie w konsoli podczas ładowania questów

Teraz troche trudniejszych rzeczy:

Cytuj
class Quest (JQuest) :

   def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)


   def onEvent(self,event,st):
      htmltext = event
      count=st.getQuestItemsCount(ADENA_ID)
      if count < 150000 or st.getPlayer().getLevel() < 40 :
         htmltext = "<html><head><body>No Tienes Adena.<br></body></html>"
      else:
         st.takeItems(ADENA_ID,0)
         st.getPlayer().setTarget(st.getPlayer())
         
         if event == "1":
            st.takeItems(ADENA_ID,1000)
            st.getPlayer().setCurrentCp(st.getPlayer().getMaxCp())
                                st.getPlayer().setCurrentHp(st.getPlayer().getMaxHp())
                                st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

Ta całośc odpowiada za rozpoczęcie questu oraz za wyświetlenie htmlka kiedy dana osoba np nie ma adeny


Teraz dodajemy konkretne buffki:

if event == "2":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4342,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)



to jest akurat ww (wind Walk)

Kiedy chcemy dodac nastepnego robimy:

Cytuj
if event == "3":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4342,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)
Zmieniamy kolejno
Cytuj
if event == "2":
            
na
Cytuj
if event == "3":
            
I tak dalej.
To co zaznaczyłem na pomarańczowo to ID buffka a 2 to level buffka. Zmieniamy poprostu wartości np:
Tytuł: Odp: [Poradnik] NPC Bufferek
Wiadomość wysłana przez: Maślan w Kwiecień 12, 2008, 11:03:20 am
Cytuj
   #Wind Walk
         if event == "2":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4342,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Decrease Weight
         if event == "3":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4343,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Shield
         if event == "4":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4344,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Might
         if event == "5":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4345,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         #Mental Shield
         if event == "6":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4346,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         #Bless the Body
         if event == "7":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4347,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         #Bless the Soul
         if event == "8":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4348,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         #Magic Barrier
         if event == "9":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4349,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Resist Shock
         if event == "10":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4350,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         #Concentration
         if event == "11":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4351,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Berserker Spirit
         if event == "12":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4352,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Bless Shield
         if event == "13":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4353,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         #Vampiric Rage
         if event == "14":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4354,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Acumen
         if event == "15":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4355,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Empower
         if event == "16":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4356,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Haste
         if event == "17":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4357,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         #Guidance
         if event == "18":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4358,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         #Focus
         if event == "19":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4359,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)

         #Death Whisper
         if event == "20":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4360,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())   
            st.setState(COMPLETED)

         if event == "21":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(271,1).getEffects(st.getPlayer(),st.getPlayer())   
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "22":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(272,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "23":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(273,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "24":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(274,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "25":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(275,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "26":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(276,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "27":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(277,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "28":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(307,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "29":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(309,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "30":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(310,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "31":
            st.takeItems(ADENA_ID,20000)      
            SkillTable.getInstance().getInfo(311,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "32":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(366,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "33":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(365,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())         

         if event == "34":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(264,1).getEffects(st.getPlayer(),st.getPlayer())   
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "35":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(265,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "36":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(266,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "37":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(267,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

         if event == "38":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(268,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "39":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(269,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "40":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(270,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "41":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(304,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "42":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(305,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "43":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(306,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "44":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(308,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "45":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(363,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())


         if event == "46":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(364,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

             
         if event == "47":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(349,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())

            st.setState(COMPLETED)
            
            
         #Chant of Battle
         if event == "48":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1007,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)
            
         #Chant of Shielding
         if event == "49":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1009,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)
            
         #Chant of Fire
         if event == "50":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1006,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)
            
         #Chant of Flame
         if event == "51":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1002,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)
            
         #Chant of life
         if event == "52":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1229,18).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)
            
         #Chant of Fury
         if event == "53":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1251,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)
            
         #Chant of Evasion
         if event == "54":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1252,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            st.setState(COMPLETED)
            
         #Chant of Rage
         if event == "55":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1253,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
   
            st.setState(COMPLETED)
            
         #Chant of Revenge
         if event == "56":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1284,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)
            
         #Chant of Vampire
         if event == "57":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1310,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)
            
         #Chant of Eagle
         if event == "58":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1309,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)
            
         #Chant of Predator
         if event == "59":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1308,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
         
            st.setState(COMPLETED)
            
         #Chant of Spirit
         if event == "60":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1362,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
         
            st.setState(COMPLETED)
            
         #Chant of Victory
         if event == "61":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1363,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)
            
         #chant of magnus
         if event == "62":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1413,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)   
         
         #MPreg
         if event == "63":
            st.takeItems(ADENA_ID,1000)
            SkillTable.getInstance().getInfo(1013,32).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
               
            st.setState(COMPLETED)         

         #greatmight
         if event == "64":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1388,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
         
            st.setState(COMPLETED)

         #greatshield
         if event == "65":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1389,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
               
            st.setState(COMPLETED)

         #holyresist
         if event == "66":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1392,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)

         #Unholyresist
         if event == "67":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1393,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
         
            st.setState(COMPLETED)

         #pof
         if event == "68":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1356,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
               
            st.setState(COMPLETED)

         #elemtprotect
         if event == "69":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1352,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)

         #wildmagic
         if event == "70":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1303,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
      
            st.setState(COMPLETED)

         #advblock
         if event == "71":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1304,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)

         #divProtect
         if event == "72":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1353,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)

         #pow
         if event == "73":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1355,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)

         #powi
         if event == "74":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1357,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)

         #manaregen
         if event == "75":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1047,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
      
            st.setState(COMPLETED)

         #ba
         if event == "76":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1311,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            
            st.setState(COMPLETED)
                        #noble
         if event == "77":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1323,1).getEffects(st.getPlayer(),st.getPlayer())
      
            st.setState(COMPLETED)
            

         #Cancellation
         if event == "78":
            st.takeItems(ADENA_ID,5000)
            st.getPlayer().useMagic(SkillTable.getInstance().getInfo(9950,1),False,False)
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
      
            st.setState(COMPLETED)      

Teraz kończymy plik pythona dopisując
Cytuj
return htmltext


   def onTalk (self,npc,player):
      st = player.getQuestState(qn)
      htmltext = "<html><head><body>I have nothing to say to you</body></html>"
      st.setState(State.STARTED)
      return InitialHtml

QUEST       = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc)

for npcId in NPC:
 QUEST.addStartNpc(npcId)
 QUEST.addTalkId(npcId)

i zapisujemy pod nazwą __init__.py.
Tytuł: Odp: [Poradnik] NPC Bufferek
Wiadomość wysłana przez: Maślan w Kwiecień 12, 2008, 11:03:58 am
Cytuj
import sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from net.sf.l2j.gameserver.datatables import SkillTable
from net.sf.l2j                import L2DatabaseFactory
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

qn = "9999_NPCBuffer"

NPC=[40010]
ADENA_ID=57
QuestId     = 9999
QuestName   = "NPCBuffer"
QuestDesc   = "custom"
InitialHtml = "1.htm"

print "importing custom: 9999: NPCBuffer"

class Quest (JQuest) :

   def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)


   def onEvent(self,event,st):
      htmltext = event
      count=st.getQuestItemsCount(ADENA_ID)
      if count < 150000 or st.getPlayer().getLevel() < 40 :
         htmltext = "<html><head><body>No Tienes Adena.<br></body></html>"
      else:
         st.takeItems(ADENA_ID,0)
         st.getPlayer().setTarget(st.getPlayer())
         
         if event == "1":
            st.takeItems(ADENA_ID,1000)
            st.getPlayer().setCurrentCp(st.getPlayer().getMaxCp())
                                st.getPlayer().setCurrentHp(st.getPlayer().getMaxHp())
                                st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "1.htm"      
            st.setState(COMPLETED)

         #Wind Walk
         if event == "2":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4342,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Decrease Weight
         if event == "3":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4343,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Shield
         if event == "4":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4344,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Might
         if event == "5":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4345,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Mental Shield
         if event == "6":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4346,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Bless the Body
         if event == "7":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4347,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Bless the Soul
         if event == "8":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4348,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Magic Barrier
         if event == "9":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4349,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Resist Shock
         if event == "10":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4350,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Concentration
         if event == "11":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4351,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Berserker Spirit
         if event == "12":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4352,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Bless Shield
         if event == "13":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4353,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Vampiric Rage
         if event == "14":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4354,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Acumen
         if event == "15":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4355,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Empower
         if event == "16":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4356,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Haste
         if event == "17":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4357,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Guidance
         if event == "18":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4358,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Focus
         if event == "19":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4359,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Death Whisper
         if event == "20":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4360,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         if event == "21":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(271,1).getEffects(st.getPlayer(),st.getPlayer())   
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "22":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(272,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "23":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(273,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "24":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(274,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "25":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(275,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "26":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(276,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "27":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(277,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "28":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(307,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "29":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(309,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "30":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(310,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "31":
            st.takeItems(ADENA_ID,20000)      
            SkillTable.getInstance().getInfo(311,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "32":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(366,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "33":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(365,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())         
            return "3.htm"

         if event == "34":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(264,1).getEffects(st.getPlayer(),st.getPlayer())   
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "35":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(265,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "36":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(266,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "37":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(267,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "38":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(268,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "39":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(269,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "40":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(270,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "41":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(304,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "42":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(305,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "43":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(306,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"   

         if event == "44":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(308,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "45":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(363,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "46":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(364,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"   
             
         if event == "47":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(349,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"   
            st.setState(COMPLETED)
            
            
         #Chant of Battle
         if event == "48":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1007,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Shielding
         if event == "49":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1009,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Fire
         if event == "50":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1006,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Flame
         if event == "51":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1002,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of life
         if event == "52":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1229,18).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Fury
         if event == "53":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1251,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Evasion
         if event == "54":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1252,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Rage
         if event == "55":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1253,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Revenge
         if event == "56":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1284,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Vampire
         if event == "57":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1310,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Eagle
         if event == "58":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1309,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Predator
         if event == "59":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1308,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Spirit
         if event == "60":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1362,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #Chant of Victory
         if event == "61":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1363,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
            
         #chant of magnus
         if event == "62":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1413,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)   
         
         #MPreg
         if event == "63":
            st.takeItems(ADENA_ID,1000)
            SkillTable.getInstance().getInfo(1013,32).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "1.htm"      
            st.setState(COMPLETED)         

         #greatmight
         if event == "64":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1388,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #greatshield
         if event == "65":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1389,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #holyresist
         if event == "66":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1392,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #Unholyresist
         if event == "67":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1393,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #pof
         if event == "68":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1356,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #elemtprotect
         if event == "69":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1352,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #wildmagic
         if event == "70":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1303,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #advblock
         if event == "71":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1304,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #divProtect
         if event == "72":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1353,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #pow
         if event == "73":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1355,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #powi
         if event == "74":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1357,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #manaregen
         if event == "75":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1047,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)

         #ba
         if event == "76":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1311,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"      
            st.setState(COMPLETED)
                        #noble
         if event == "77":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1323,1).getEffects(st.getPlayer(),st.getPlayer())
            return "1.htm"      
            st.setState(COMPLETED)
            

         #Cancellation
         if event == "78":
            st.takeItems(ADENA_ID,5000)
            st.getPlayer().useMagic(SkillTable.getInstance().getInfo(9950,1),False,False)
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "1.htm"
            st.setState(COMPLETED)         
            
         if htmltext != event:
            st.setState(COMPLETED)
            st.exitQuest(1)
      return htmltext


   def onTalk (self,npc,player):
      st = player.getQuestState(qn)
      htmltext = "<html><head><body>I have nothing to say to you</body></html>"
      st.setState(State.STARTED)
      return InitialHtml

QUEST       = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc)

for npcId in NPC:
 QUEST.addStartNpc(npcId)
 QUEST.addTalkId(npcId)
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 12, 2008, 11:04:34 am

Teraz bierzemy sie za poszczególne Html które wyświetlają buffki.

3. Notatnik i w droge

Cytuj
<html><title>Buffer</title>
<body>
<br>
<br>
Jakis tekst
<br>
<img src="L2UI_CH3.onscrmsg_pattern01_1" width=300 height=32 align=left>
<center>
<table border="0" cellspacing="0">

   <tr>
   <td valign=top><img src=icon.skill1240 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1087 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1010 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1036 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1243 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1033 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1303 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1035 width=32 height=32 align=left></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1032 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1048 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1078 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1085 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1059 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1352 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1259 width=32 height=32 align=left></td>
   <td valign=top><img src=icon.skill1393 width=32 height=32 align=left></td>
   </tr>
   
</table>
<br>
<img src="L2UI_CH3.onscrmsg_pattern01_2" width=300 height=32 align=left>
<table width="200" border="0">
  <tr>
    <td><button value="HP-MP-CP" action="bypass -h Quest 9999_NPCBuffer 1" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><button value="Noblesse" action="bypass -h Quest 9999_NPCBuffer 77" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><button value="Choose Buffs" action="bypass -h Quest 9999_NPCBuffer 2.htm" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><button value="Dances" action="bypass -h Quest 9999_NPCBuffer 3.htm" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><button value="Songs" action="bypass -h Quest 9999_NPCBuffer 4.htm" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><button value="Chants" action="bypass -h Quest 9999_NPCBuffer 5.htm" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><button value="Cancel Buff" action="bypass -h Quest 9999_NPCBuffer 78" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</center>
</html>


Zapisujemy jako html 1.htm

HTML 2 :D

Cytuj
<html><title>Choose Buffs</title>
<body>
<center>
<img src="L2UI_CH3.herotower_deco" height="32" width="256">
<table>

   <tr>
   <td valign=top><img src=icon.skill1204 width=32 height=32 align=left></td>
   <td valign=top><button value="WindWalk" action="bypass -h Quest 9999_NPCBuffer 2" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><img src=icon.skill1040 width=32 height=32 align=left></td>
   <td valign=top><button value="Shield" action="bypass -h Quest 9999_NPCBuffer 4" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1068 width=32 height=32 align=left></td>
   <td valign=top><button value="Might" action="bypass -h Quest 9999_NPCBuffer 5" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><img src=icon.skill1035 width=32 height=32 align=left></td>
   <td valign=top><button value="MentalShield" action="bypass -h Quest 9999_NPCBuffer 6" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1045 width=32 height=32 align=left></td>
   <td valign=top><button value="BlessBody" action="bypass -h Quest 9999_NPCBuffer 7" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><img src=icon.skill1048 width=32 height=32 align=left></td>
   <td valign=top><button value="BlessSoul" action="bypass -h Quest 9999_NPCBuffer 8" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1036 width=32 height=32 align=left></td>
   <td valign=top><button value="MagicBarrier" action="bypass -h Quest 9999_NPCBuffer 9" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><img src=icon.skill1259 width=32 height=32 align=left></td>
   <td valign=top><button value="ResistShock" action="bypass -h Quest 9999_NPCBuffer 10" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1078 width=32 height=32 align=left></td>
   <td valign=top><button value="Concentration" action="bypass -h Quest 9999_NPCBuffer 11" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><img src=icon.skill1062 width=32 height=32 align=left></td>
   <td valign=top><button value="BerserkerSpirit" action="bypass -h Quest 9999_NPCBuffer 12" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1243 width=32 height=32 align=left></td>
   <td valign=top><button value="BlessShield" action="bypass -h Quest 9999_NPCBuffer 13" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><img src=icon.skill1268 width=32 height=32 align=left></td>
   <td valign=top><button value="VampiricRage" action="bypass -h Quest 9999_NPCBuffer 14" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1085 width=32 height=32 align=left></td>
   <td valign=top><button value="Acumen" action="bypass -h Quest 9999_NPCBuffer 15" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><img src=icon.skill1059 width=32 height=32 align=left></td>
   <td valign=top><button value="Empower" action="bypass -h Quest 9999_NPCBuffer 16" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1086 width=32 height=32 align=left></td>
   <td valign=top><button value="Haste" action="bypass -h Quest 9999_NPCBuffer 17" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><img src=icon.skill1240 width=32 height=32 align=left></td>
   <td valign=top><button value="Guidance" action="bypass -h Quest 9999_NPCBuffer 18" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
   <td valign=top><img src=icon.skill1077 width=32 height=32 align=left></td>
   <td valign=top><button value="Focus" action="bypass -h Quest 9999_NPCBuffer 19" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   <td valign=top><font color="B09878"><img src=icon.skill1242 width=32 height=32 align=left></font></td>
   <td valign=top><button value="DeathWhisper" action="bypass -h Quest 9999_NPCBuffer 20" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
   </tr>

   <tr>
     <td valign=top><img src=icon.skill1388 width=32 height=32 align=left></td>
     <td valign=top><button value="GreaterMight" action="bypass -h Quest 9999_NPCBuffer 64" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
     <td valign=top><img src=icon.skill1389 width=32 height=32 align=left></td>
     <td valign=top><button value="GreaterShield" action="bypass -h Quest 9999_NPCBuffer 65" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    </tr>
   <tr>
     <td valign=top><img src=icon.skill1392 width=32 height=32 align=left></td>
     <td valign=top><button value="HolyResist" action="bypass -h Quest 9999_NPCBuffer 66" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
     <td valign=top><img src=icon.skill1393 width=32 height=32 align=left></td>
     <td valign=top><button value="UNHolyResis" action="bypass -h Quest 9999_NPCBuffer 67" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    </tr>
   <tr>
     <td valign=top><img src=icon.skill1356 width=32 height=32 align=left></td>
     <td valign=top><button value="PropheofFire" action="bypass -h Quest 9999_NPCBuffer 68" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
     <td valign=top><img src=icon.skill1352 width=32 height=32 align=left></td>
     <td valign=top><button value="ElementalProte" action="bypass -h Quest 9999_NPCBuffer 69" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    </tr>
   <tr>
     <td valign=top><img src=icon.skill1303 width=32 height=32 align=left></td>
     <td valign=top><button value="WildMagic" action="bypass -h Quest 9999_NPCBuffer 70" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
     <td valign=top><img src=icon.skill1304 width=32 height=32 align=left></td>
     <td valign=top><button value="AdvancedBlock" action="bypass -h Quest 9999_NPCBuffer 71" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    </tr>
   <tr>
     <td valign=top><img src=icon.skill1355 width=32 height=32 align=left></td>
     <td valign=top><button value="PropheofWater" action="bypass -h Quest 9999_NPCBuffer 73" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
     <td valign=top><img src=icon.skill1357 width=32 height=32 align=left></td>
     <td valign=top><button value="PropheofWind" action="bypass -h Quest 9999_NPCBuffer 74" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    </tr>
   <tr>
     <td valign=top><img src=icon.skill1047 width=32 height=32 align=left></td>
     <td valign=top><button value="ManaRegenera" action="bypass -h Quest 9999_NPCBuffer 75" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
     <td valign=top><img src=icon.skill1257 width=32 height=32 align=left></td>
     <td valign=top><button value="DecreaseWeight" action="bypass -h Quest 9999_NPCBuffer 3" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
</table>
<td>
<br>
<button value="Go Back" action="bypass -h Quest 9999_NPCBuffer 1.htm" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
<img src="L2UI_CH3.herotower_deco" height="32" width="256">
</center>
</body>
</html>


Zapsujemy jako 2.htm
Html nr 3:
Cytuj
<html><title>Dances</title>
<center>
<body>
<br>
<br>
<br>
<img src="L2UI_CH3.herotower_deco" height="32" width="256">
<table>
  <tr>
    <td><img src=icon.skill0271 width=32 height=32 align=left></td>
    <td><button value="Warrior" action="bypass -h Quest 9999_NPCBuffer 21" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0272 width=32 height=32 align=left></td>
    <td><button value="Inspiration" action="bypass -h Quest 9999_NPCBuffer 22" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0273 width=32 height=32 align=left></td>
    <td><button value="Mystic" action="bypass -h Quest 9999_NPCBuffer 23" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0274 width=32 height=32 align=left></td>
    <td><button value="Fire" action="bypass -h Quest 9999_NPCBuffer 24" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0275 width=32 height=32 align=left></td>
    <td><button value="Fury" action="bypass -h Quest 9999_NPCBuffer 25" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0276 width=32 height=32 align=left></td>
    <td><button value="Concentration" action="bypass -h Quest 9999_NPCBuffer 26" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0277 width=32 height=32 align=left></td>
    <td><button value="Light" action="bypass -h Quest 9999_NPCBuffer 27" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0307 width=32 height=32 align=left></td>
    <td><button value="Aqua Guard" action="bypass -h Quest 9999_NPCBuffer 28" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0309 width=32 height=32 align=left></td>
    <td><button value="Earth Guard" action="bypass -h Quest 9999_NPCBuffer 29" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0310 width=32 height=32 align=left></td>
    <td><button value="Vampire" action="bypass -h Quest 9999_NPCBuffer 30" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0311 width=32 height=32 align=left></td>
    <td><button value="Protection" action="bypass -h Quest 9999_NPCBuffer 31" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0366 width=32 height=32 align=left></td>
    <td><button value="Shadow" action="bypass -h Quest 9999_NPCBuffer 32" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  </tr>
  <tr>
    <td><img src=icon.skill0365 width=32 height=32 align=left></td>
    <td><button value="Siren" action="bypass -h Quest 9999_NPCBuffer 33" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td></td>
    <td></td>
  </tr>
</table>
<br>
  <td><button value="Go Back" action="bypass -h Quest 9999_NPCBuffer 1.htm" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
    </td>
      <img src="L2UI_CH3.herotower_deco" height="32" width="256">
</body>
</center>
</html>

Zapisujemy 3.htm

Html nr 4:
Cytuj
<html><title>Songs</title>
<center>
<body>
<img src="L2UI_CH3.herotower_deco" height="32" width="256">
<table border="0">
  <tr>
    <td><img src=icon.skill0264 width=32 height=32 align=left></td>
    <td><button value="Earth" action="bypass -h Quest 9999_NPCBuffer 34" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0265 width=32 height=32 align=left></td>
    <td><button value="Life" action="bypass -h Quest 9999_NPCBuffer 35" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0266 width=32 height=32 align=left></td>
    <td><button value="Water" action="bypass -h Quest 9999_NPCBuffer 36" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0267 width=32 height=32 align=left></td>
    <td><button value="Warding" action="bypass -h Quest 9999_NPCBuffer 37" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0268 width=32 height=32 align=left></td>
    <td><button value="Wind" action="bypass -h Quest 9999_NPCBuffer 38" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0269 width=32 height=32 align=left></td>
    <td><button value="Hunter" action="bypass -h Quest 9999_NPCBuffer 39" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0270 width=32 height=32 align=left></td>
    <td><button value="Invocation" action="bypass -h Quest 9999_NPCBuffer 40" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0304 width=32 height=32 align=left></td>
    <td><button value="Vitality" action="bypass -h Quest 9999_NPCBuffer 41" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0305 width=32 height=32 align=left></td>
    <td><button value="Vengeance" action="bypass -h Quest 9999_NPCBuffer 42" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0306 width=32 height=32 align=left></td>
    <td><button value="Flame Guard" action="bypass -h Quest 9999_NPCBuffer 43" width=80 height=20 back"L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0307 width=32 height=32 align=left></td>
    <td><button value="Storm Guard" action="bypass -h Quest 9999_NPCBuffer 44" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0308 width=32 height=32 align=left></td>
    <td><button value="Meditation" action="bypass -h Quest 9999_NPCBuffer 45" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill0364 width=32 height=32 align=left></td>
    <td><button value="Champion" action="bypass -h Quest 9999_NPCBuffer 46" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill0349 width=32 height=32 align=left></td>
    <td><button value="Renewal" action="bypass -h Quest 9999_NPCBuffer 47" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
</table>
<br>
<td><button value="Go Back" action="bypass -h Quest 9999_NPCBuffer 1.htm" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
<img src="L2UI_CH3.herotower_deco" height="32" width="256">
</body>
</center>
</html>

save 4.htm

Html nr 5:

Cytuj
<html><title>Chants</title>
<body>
<center>
<img src="L2UI_CH3.herotower_deco" height="32" width="256">
<table border="0">
  <tr>
    <td><img src=icon.skill1007 width=32 height=32 align=left></td>
    <td><button value="Battle" action="bypass -h Quest 9999_NPCBuffer 48" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill1009 width=32 height=32 align=left></td>
    <td><button value="Shielding" action="bypass -h Quest 9999_NPCBuffer 49" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill1006 width=32 height=32 align=left></td>
    <td><button value="Fire" action="bypass -h Quest 9999_NPCBuffer 50" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill1002 width=32 height=32 align=left></td>
    <td><button value="Flame" action="bypass -h Quest 9999_NPCBuffer 51" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill1229 width=32 height=32 align=left></td>
    <td><button value="Life" action="bypass -h Quest 9999_NPCBuffer 52" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill1251 width=32 height=32 align=left></td>
    <td><button value="Fury" action="bypass -h Quest 9999_NPCBuffer 53" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill1252 width=32 height=32 align=left></td>
    <td><button value="Evasion" action="bypass -h Quest 9999_NPCBuffer 54" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill1253 width=32 height=32 align=left></td>
    <td><button value="Rage" action="bypass -h Quest 9999_NPCBuffer 55" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill1284 width=32 height=32 align=left></td>
    <td><button value="Revenge" action="bypass -h Quest 9999_NPCBuffer 56" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill1310 width=32 height=32 align=left></td>
    <td><button value="Vampire" action="bypass -h Quest 9999_NPCBuffer 57" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill1309 width=32 height=32 align=left></td>
    <td><button value="Eagle" action="bypass -h Quest 9999_NPCBuffer 58" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill1308 width=32 height=32 align=left></td>
    <td><button value="Predator" action="bypass -h Quest 9999_NPCBuffer 59" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill1362 width=32 height=32 align=left></td>
    <td><button value="Spirit" action="bypass -h Quest 9999_NPCBuffer 60" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td><img src=icon.skill1363 width=32 height=32 align=left></td>
    <td><button value="Victory" action="bypass -h Quest 9999_NPCBuffer 61" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
  </tr>
  <tr>
    <td><img src=icon.skill1413 width=32 height=32 align=left></td>
    <td><button value="Magnus" action="bypass -h Quest 9999_NPCBuffer 62" width=80 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
<button value="Go Back" action="bypass -h Quest 9999_NPCBuffer 1.htm" width=100 height=20 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
<img src="L2UI_CH3.herotower_deco" height="32" width="256">
</body>
</center>
</html>

Zapisujemy 5.htm

Dodawanie questu do gameservera.

tworzymy sobie Katalog 9999_NPCBuffer i wrzucamy do niego pliki:
1.htm
2.htm
3.htm
4.htm
5.htm
__init__.py
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 12, 2008, 11:12:46 am
Następnie kopjujemy do katalogu /data/scripts/custom/
A plik 40010.htm kopjujemy do /data/html/default/

Teraz dodajemy wpis do pliku scripts.cfg

na samym końcu poniżej
Cytuj
# Custom
custom/3995_echo/__init__.py
custom/4000_ShadowWeapons/__init__.py
custom/7000_HeroItems/__init__.py
custom/8000_RaidbossInfo/__init__.py
custom/6050_KetraOrcSupport/__init__.py
custom/6051_VarkaSilenosSupport/__init__.py
custom/8500_Buffer/__init__.py
custom/8501_Regen/__init__.py
custom/8502_raid_antharas/__init__.py
custom/8502_raid_baium/__init__.py
custom/8502_raid_valakas/__init__.py
tego dodajemy:
Cytuj
custom/9999_NPCBuffer/__init__.py

i Zapisujemy plik.

Na koniec zostało dodanie wpisu do bazy mysql. A konkretniej:

Cytuj
INSERT INTO `npc` VALUES ('40010', '32174', 'Npc Buffer', '1', 'buu', '1', 'LineageNPC2.K_F1_guard', '13.00', '22.50', '70', 'female', 'L2Npc', '40', '3862', '1494', null, null, '40', '43', '30', '21', '20', '10', '5879', '590', '1444', '514', '760', '381', '253', '0', '253', '9644', '0', '0', '80', '120', null, null, '0', '0', 'LAST_HIT');

Wykonujemy to zapytanie sql. Teraz wystarczy zrestartowac serwer i mamy buffera po wcześniejszym spawnie //spawn 40010


Sory za kilka postów ale jest limit 4000 znaków. W razie problemów pisac.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: AnDrOx w Kwiecień 12, 2008, 04:57:39 pm
"Gratz" Maślan spisałeś się :D
Wszystko wydaje się proste.....ale mam już pierwszy problem gdy klikam na mojego Bufera w jej okienku zamiast  tekstu mam tylko -cyt."Html was too long "
I druga spraw jak zmienić jej Imię ,(Title)
Wpisałem niby w Navicat....no ale lipa:/ :_delf_2:
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 12, 2008, 05:07:17 pm
"Gratz" Maślan spisałeś się :D
Wszystko wydaje się proste.....ale mam już pierwszy problem gdy klikam na mojego Bufera w jej okienku zamiast  tekstu mam tylko -cyt."Html was too long "
I druga spraw jak zmienić jej Imię ,(Title)
Wpisałem niby w Navicat....no ale lipa:/ :_delf_2:


Co do pierwszego. Htmlek jest za duży żeby mógłbyc wczytany :)

Co do Title. Baza sql, Tabela "npc", kolumna title
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Luno w Kwiecień 12, 2008, 05:26:47 pm
Maslan 2 uwagi do skryptu pythona:

1) Czemu tak masakrycznie paskudnie powtarzasz ten sam kod, zamiast uzyc jakiejs prostej mapy w ktorej kluczem jest id eventu a wartoscia krotka skladajaca sie np z <id skilla, lv skilla, adena, return type> , przez co zamiast 80*6 wierszy kodu bedziesz miec 6 wierszy kodu + 80 na definicje mapy.

2)
         #Cancellation
         if event == "78":
            st.takeItems(ADENA_ID,5000)
            st.getPlayer().useMagic(SkillTable.getInstance().getInfo(9950,1),False,False)
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "1.htm"
            st.setState(COMPLETED)   
kod po 'return' sie nigdy nie wykona i masz tak w kazdym ifie.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 12, 2008, 05:30:41 pm
Ten buffer jest bardziej rozbudowany i od razu pokazuje jak dodać buffa do buffera.

Pokazałbym prostego to wiesz. Jedno kliknięcie i od razu all buffy a mi chodziło o przedstawienie całości.

Ale jeżeli ktoś chce takiego prostego to napisac.


___edit____

A faktycznie. Thx za poprawke.

Soul: edytuj te posty, a nie
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: AnDrOx w Kwiecień 12, 2008, 06:57:57 pm
Chyba oszaleję  :shock:
Title---INSERT INTO npc
   (`id`, `idTemplate`, `name`, `serverSideName`, `title`, `serverSideTitle`, `class`, `collision_radius`, `collision_height`, `level`, `sex`, `type`, `attackrange`, `hp`, `mp`, `hpreg`, `mpreg`, `str`, `con`, `dex`, `int`, `wit`, `men`, `exp`, `sp`, `patk`, `pdef`, `matk`, `mdef`, `atkspd`, `aggro`, `matkspd`, `rhand`, `lhand`, `armor`, `walkspd`, `runspd`, `faction_id`, `faction_range`, `isUndead`, `absorb_level`, `absorb_type`, `ss`, `bss`, `ss_rate`, `AI`)
VALUES
   (99999, 30767, 'Sonia', 0, '', 0, 'L2Merchant', 8.00, 22.00, 70, 'female', 'L2Npc', 0, 3862, 1493, 11.85, 2.78, 40, 43, 30, 21, 20, 10, 0, 0, 278, 382, 780, 382, 278, 0, 333, 0, 0, 0, 33, 132, 'NULL', 0, 1, 0, 'LAST_HIT', 0, 0, 0, 'fighter');
I nic...:(
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Luno w Kwiecień 12, 2008, 07:08:43 pm
Po kolejne:

Cytuj
from java.util import Iterator
from net.sf.l2j                import L2DatabaseFactory

Po co importujesz klasy, ktorych nie uzywasz ?
I fundamentalne pytanie: czy ty to napisales sam czy skads przekopiowales, bo sa watpliwosci.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 12, 2008, 07:19:26 pm
Po kolejne:

Cytuj
from java.util import Iterator
from net.sf.l2j                import L2DatabaseFactory

Po co importujesz klasy, ktorych nie uzywasz ?
I fundamentalne pytanie: czy ty to napisales sam czy skads przekopiowales, bo sa watpliwosci.

html są moje, reszta ściągnięta z emu plików bo nie miałem czasu własnego pisac - za dużo pracy z offem mam
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: AnDrOx w Kwiecień 12, 2008, 07:47:30 pm
Odnośnie nazwy NPCa w Tabeli Name- Imię np. Czesio- i wartość SerwerSideName (0)zmieniamy na(1)  Tabela Title Czynność wykonywana przez NPCa np.Buffer-i wartość  w SerwerSideTitle z (0) na(1)   
To dla tych którzy mają z tym problem tak jak Ja miałem   :D



Soul: edytujemy posty, a nie wysyłamy następne. 



Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: grzeh11 w Grudzień 23, 2008, 11:21:42 am
Witam

Mam problem z NPC Bufferem , zrobiłem wszystko co trzeba było i jak wpisuje //spawn 40010 to nie działa nie chce się pokazać pisze że nie ma takiego targetu.Wiecie co może źle zrobiłem?

Pozdrawiam
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Matim w Grudzień 23, 2008, 11:27:55 am
NPC się nie pokazuje ? Czy nie spawmuje sie bo pisze , ze takiego NPC'ka nie ma? Jeżeli 1 opcja to masz za stary system ( wyglad npc pewnie jest z nowszej kroniki niz Twój system ) A jezeli 2 opcja to pewnie zle wgrales . Np nie dodales sql'a do bazy .
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: grzeh11 w Grudzień 23, 2008, 11:42:56 am
Właśnie chyba z dodaniem do bazy sql nie wiem za bardzo jak dodać , chyba o co chodzi.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Matim w Grudzień 23, 2008, 08:47:30 pm
Właśnie chyba z dodaniem do bazy sql nie wiem za bardzo jak dodać , chyba o co chodzi.


I dziwisz się , że coś Ci nie działa ? Nigdy nie powinieneś liczyc na to , że akurat może będzie działac bez wykonania wszystkich czynności . Mówisz , że nie wiesz jak dodac . A czy czytałes poradniki na ten temat ? Jest jeden taki ładnie opisany wraz ze screenami . Wchodzisz do MySQL'a , prawym przyciskiem myszy klikasz na Twoją bazę danych ( np l2jdb ) i wybierasz opcje

Execute Batch File

Zatwierdzasz , czekasz aż Ci wgra . Jak będzie pisalo succesfull to znaczy , że wszystko ok . Jeżeli unsuccesfull to znaczy , że coś nie pasuje . W tym wypadku możesz dodac ręcznie do bazy danych .
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: pr2n w Grudzień 23, 2008, 10:45:55 pm
Jeżeli unsuccesfull to znaczy , że coś nie pasuje . W tym wypadku możesz dodac ręcznie do bazy danych .
Dzięki opcji "Insert record"(taki plusik)... A tak nawiasem to aż ręce opadają...
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: pawel1105 w Kwiecień 04, 2009, 12:53:52 pm
Teraz dodajemy wpis do pliku scripts.cfg

na samym końcu poniżej
Cytuj
# Custom
custom/3995_echo/__init__.py
custom/4000_ShadowWeapons/__init__.py
custom/7000_HeroItems/__init__.py
custom/8000_RaidbossInfo/__init__.py
custom/6050_KetraOrcSupport/__init__.py
custom/6051_VarkaSilenosSupport/__init__.py
custom/8500_Buffer/__init__.py
custom/8501_Regen/__init__.py
custom/8502_raid_antharas/__init__.py
custom/8502_raid_baium/__init__.py
custom/8502_raid_valakas/__init__.py
tego dodajemy:
Cytuj
custom/9999_NPCBuffer/__init__.py

i Zapisujemy plik.

Na koniec zostało dodanie wpisu do bazy mysql. A konkretniej:

Cytuj
INSERT INTO `npc` VALUES ('40010', '32174', 'Npc Buffer', '1', 'buu', '1', 'LineageNPC2.K_F1_guard', '13.00', '22.50', '70', 'female', 'L2Npc', '40', '3862', '1494', null, null, '40', '43', '30', '21', '20', '10', '5879', '590', '1444', '514', '760', '381', '253', '0', '253', '9644', '0', '0', '80', '120', null, null, '0', '0', 'LAST_HIT');

Wykonujemy to zapytanie sql. Teraz wystarczy zrestartowac serwer i mamy buffera po wcześniejszym spawnie //spawn 40010


pomoze ktos z tym...nie moge pliku scripts.cfg znalesc;//
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Matim w Kwiecień 04, 2009, 02:19:09 pm
Folder data .
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: pawel1105 w Kwiecień 04, 2009, 08:14:09 pm
a jeszcze jedno...
Na koniec zostało dodanie wpisu do bazy mysql. A konkretniej:

Cytuj
INSERT INTO `npc` VALUES ('40010', '32174', 'Npc Buffer', '1', 'buu', '1', 'LineageNPC2.K_F1_guard', '13.00', '22.50', '70', 'female', 'L2Npc', '40', '3862', '1494', null, null, '40', '43', '30', '21', '20', '10', '5879', '590', '1444', '514', '760', '381', '253', '0', '253', '9644', '0', '0', '80', '120', null, null, '0', '0', 'LAST_HIT');

Wykonujemy to zapytanie sql.

wchodze w mysql i co dalej??
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Matim w Kwiecień 04, 2009, 08:34:13 pm
Jeśli wyjdzie komunikat succesfull to znaczy , że wgrało poprawnie - to wszystko .
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Soul w Kwiecień 05, 2009, 10:54:47 am
PPM na bazie danych i Execute Batch File
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 05, 2009, 11:22:26 am
PPM na bazie danych i Execute Batch File

i gdzie wkei komende ? bo Execute jest do wgrywania plików *.sql a on raczej nie będzie wiedział że cały wpis INSERT into ma zapisac w pliku *.sql.

PPM na baze i Console - tam wpisz ten kod i enter
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Soul w Kwiecień 05, 2009, 12:01:32 pm
Bo to jest wielka filozofia zrobić plik tekstowy, nie? :)
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 05, 2009, 12:02:46 pm
Bo to jest wielka filozofia zrobić plik tekstowy, nie? :)

uwierz mi ze dla niektórych tak ....
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: CriminaL w Kwiecień 08, 2009, 09:43:03 pm
Maślan pewnie głupie pytanie zadam ale gdzie znajdę plik scripts.cfg?

A może mam go stworzyć? jeśli tak to gdzie go umieścić?
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Matim w Kwiecień 08, 2009, 10:23:19 pm
Wystarczy czytać cały temat .

Folder data .
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: CriminaL w Kwiecień 08, 2009, 10:35:56 pm
Spokojnie, przeczytałem cały, sęk w tym że w całym folderze serwa nie mam takiego pliku. Użyłem opcji Wyszukaj i nie znalazł.

Dlatego pytam, ale już chyba doszedłem do tego że mam kiepskie pliki serwerowe.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 08, 2009, 10:39:23 pm
meaby you need dp ?
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: CriminaL w Kwiecień 08, 2009, 10:43:55 pm
Znowu angielski ćwiczysz na mnie ?  :P

Zaciągne L2JFree Interlude Final.

Zaciągnąłem i nie ma w katalogu data takiego pliku? Czy to nie dziwne? Dodatkowo jest tam oddzielne archimu o nazwie l2jfree_datapack i nie ma tam.

Swoją drogą jaka jest różnica pomiędzy plikami Free a L2JDB?
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Maślan w Kwiecień 08, 2009, 10:54:23 pm
Znowu angielski ćwiczysz na mnie ?  :P

Zaciągne L2JFree Interlude Final.

Zaciągnąłem i nie ma w katalogu data takiego pliku? Czy to nie dziwne? Dodatkowo jest tam oddzielne archimu o nazwie l2jfree_datapack i nie ma tam.

Swoją drogą jaka jest różnica pomiędzy plikami Free a L2JDB?

Jak z ang sobie nie radzisz to tym bardziej z l2j sobie nie poradzisz
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: CriminaL w Kwiecień 08, 2009, 10:57:27 pm
Nie jest tak tragicznie u mnie z angielskim. Nie jarze tylko Twoich skrótów, ale zgaduje ze dp to datapack.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Matim w Kwiecień 09, 2009, 08:24:45 am
Ściągnij najnowsze pliki a z pewnością będziesz miał . W starszych też zawsze był.
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Dodgers w Maj 26, 2009, 10:30:18 pm
Witam Was. przpraszam że odkopuje temat
Mam problem z wgraniem do SQL tej części
INSERT INTO `npc` VALUES ('40010', '32174', 'Npc Buffer', '1', 'buu', '1', 'LineageNPC2.K_F1_guard', '13.00', '22.50', '70', 'female', 'L2Npc', '40', '3862', '1494', null, null, '40', '43', '30', '21', '20', '10', '5879', '590', '1444', '514', '760', '381', '253', '0', '253', '9644', '0', '0', '80', '120', null, null, '0', '0', 'LAST_HIT', '0', '0', '0', 'fighter');
próbwalem z róznymi kombinacjami, zmienianiem konca polecenia i dalej to samo :
[Err] 1136 - Column count doesn't match value count at row 1
[Msg] Zakończono bez powodzenia

może mi ktos pomoc?
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Xyber w Maj 26, 2009, 10:41:53 pm
Witam Was. przpraszam że odkopuje temat
Mam problem z wgraniem do SQL tej części
INSERT INTO `npc` VALUES ('40010', '32174', 'Npc Buffer', '1', 'buu', '1', 'LineageNPC2.K_F1_guard', '13.00', '22.50', '70', 'female', 'L2Npc', '40', '3862', '1494', null, null, '40', '43', '30', '21', '20', '10', '5879', '590', '1444', '514', '760', '381', '253', '0', '253', '9644', '0', '0', '80', '120', null, null, '0', '0', 'LAST_HIT', '0', '0', '0', 'fighter');
próbwalem z róznymi kombinacjami, zmienianiem konca polecenia i dalej to samo :
[Err] 1136 - Column count doesn't match value count at row 1
[Msg] Zakończono bez powodzenia

może mi ktos pomoc?

Możliwe, że korzystasz z innej kroniki i nie zgadzają się kolumny. Odpal Navicat'a, wejdź w tabele 'npc', kliknij na przycisk Export Wizard -> No -> SQL script file (*.sql) -> Next -> Next -> ... Wybierz gdzie chcesz exportować plik i podaj jakąkolwiek nazwę -> Next -> Next -> Start -> Poczekaj chwilę

Otwórz zaexportowany plik notatnikiem, skopiuj pierwszy wpis np:

INSERT INTO npc
  (id, idTemplate, name, serverSideName, title, serverSideTitle, class, collision_radius, collision_height, level, sex, type, attackrange, hp, mp, hpreg, mpreg, str, con, dex, int, wit, men, exp, sp, patk, pdef, matk, mdef, atkspd, aggro, matkspd, rhand, lhand, armor, walkspd, runspd, faction_id, faction_range, isUndead, absorb_level, absorb_type, ss, bss, ss_rate, AI, drop_herbs)
VALUES
  (1, 1, "Thomas D. Turkey", 0, "Misguided Holiday Scrooge", 0, "Branch.br_crazy_turkey", 22, 32, 85, "male", "L2Npc", 40, 751, 331, "2,37", "1,53", 80, 80, 80, 80, 80, 80, 0, 0, 88, 119, 37, 112, 282, 0, 5000, 0, 0, 0, 30, 132, "NULL", 0, 0, 0, "LAST_HIT", 0, 0, 0, "fighter", "false");

Stwórz nowy plik z rozszerzeniem *.sql pozmieniaj żeby był podany do tego który Ci nie działa np:

INSERT INTO npc
  (id, idTemplate, name, serverSideName, title, serverSideTitle, class, collision_radius, collision_height, level, sex, type, attackrange, hp, mp, hpreg, mpreg, str, con, dex, int, wit, men, exp, sp, patk, pdef, matk, mdef, atkspd, aggro, matkspd, rhand, lhand, armor, walkspd, runspd, faction_id, faction_range, isUndead, absorb_level, absorb_type, ss, bss, ss_rate, AI, drop_herbs)
VALUES
  (40010, 32174, "Npc Buffer", 0, "buu", 1, "LineageNPC2.K_F1_guard", 22, 32, 85, "male", "L2Npc", 40, 751, 331, "2,37", "1,53", 80, 80, 80, 80, 80, 80, 0, 0, 88, 119, 37, 112, 282, 0, 5000, 0, 0, 0, 30, 132, "NULL", 0, 0, 0, "LAST_HIT", 0, 0, 0, "fighter", "false");

Zapisz i zaimportuj navicatem, będzie śmigać na 100% ;)
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Dodgers w Maj 26, 2009, 11:17:15 pm
no tak ;)
korzystam z gracii final ;)
 ale nie rozumiem koncowki posta ze zrobieniem tego pliku;/
INSERT INTO npc
  (id, idTemplate, name, serverSideName, title, serverSideTitle, class, collision_radius, collision_height, level, sex, type, attackrange, hp, mp, hpreg, mpreg, str, con, dex, int, wit, men, exp, sp, patk, pdef, matk, mdef, atkspd, aggro, matkspd, rhand, lhand, armor, walkspd, runspd, faction_id, faction_range, isUndead, absorb_level, absorb_type, ss, bss, ss_rate, AI, drop_herbs)
VALUES
  (1, 1, "Thomas D. Turkey", 0, "Misguided Holiday Scrooge", 0, "Branch.br_crazy_turkey", 22, 32, 85, "male", "L2Npc", 40, 751, 331, "2,37", "1,53", 80, 80, 80, 80, 80, 80, 0, 0, 88, 119, 37, 112, 282, 0, 5000, 0, 0, 0, 30, 132, "NULL", 0, 0, 0, "LAST_HIT", 0, 0, 0, "fighter", "false");
tak to u mnie wyglada
moglbys mi napisac gotowy kod mojego buffera? bo nie bardzo lapie,  co chodzi;/
Edit:
To juz zrobilem ;)
Ale mam pewien inny problem, mianowcie u mnie scripts tak wyglada:
# Custom
custom/1000_NonTalkingNpcs/__init__.py
custom/1001_FortuneTelling/__init__.py
custom/1002_Nottingale/__init__.py
custom/3995_echo/__init__.py
custom/4000_ShadowWeapons/__init__.py
custom/5000_MissQueen/__init__.py
custom/5001_NewbieCoupons/__init__.py
custom/6050_KetraOrcSupport/__init__.py
custom/6051_VarkaSilenosSupport/__init__.py
custom/7000_HeroItems/__init__.py
custom/8000_RaidbossInfo/__init__.py
custom/8001_NpcLocationInfo/__init__.py
custom/8004_PurchaseBracelet/__init__.py
custom/9999_NPCBuffer/__init__.py
i kiedy staram sie gadac z bufferem, otrzymuje bezczelna odpowiedz ;/
(https://forum.lineage2.com.pl/proxy.php?request=http%3A%2F%2Fimg38.imageshack.us%2Fimg38%2F7788%2Fshot00000e.th.jpg&hash=774c670bb8731b72076b9137ef346cbb) (http://img38.imageshack.us/my.php?image=shot00000e.jpg)
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Matim w Maj 27, 2009, 06:42:29 pm
Sprawdź czy w pliku scripts na sto procent podałeś dokładną ścieżkę do pliku .py , dodatkowo sprawdź ten plik .py i popatrz czy importy są pod Twój serwer pack . A na koniec przeczytaj regulamin , w którym piszę aby zamieszczać wszelkiego rodzaju kody w :


lub :

Cytuj

Wtedy nasze wypowiedzi są bardziej czytelne .
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: pawloo5 w Czerwiec 01, 2009, 08:19:32 am
mam pytanie co powoduje ze wyświetla mi takie coś  http://www.fotosik.pl/pokaz_obrazek/pelny/c0cbf93a6afc5883.html
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: impos89 w Czerwiec 01, 2009, 08:25:23 am
Bardzo wyraźnie... coś skaszanione i musisz wejść do logu o wskazanej nazwie aby poznać szczegóły.
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: pawloo5 w Czerwiec 01, 2009, 09:25:18 am
jeszcze zauważyłem ze w katalogu: 9999_NPCBuffer pojawił się plik: __init__.py.error w ktorym jest tresc:

[i]Error on: C:\Documents and Settings\Pawloo\Pulpit\serwerCT1.5\Gameserver\data\scripts\custom\9999_NPCBuffer\__init__.py.error.log
Line: -1 - Column: -1

Traceback (innermost last):
  (no code object) at line 0
SyntaxError: ('Lexical error at line 30, column 56.  Encountered: "\\r" (13), after : ""', ('__init__.py', 30, 56, '         htmltext = "<html><head><body>No Tienes Adena.'))
[/i]

o co może chodzić??
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Matim w Czerwiec 01, 2009, 01:34:15 pm
O tym przecież właśnie pisał Impos , a w errorze pisze Ci , w której linijce masz błąd , pisze Ci także jaki .
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Sebal w Czerwiec 01, 2009, 01:56:57 pm
O tym przecież właśnie pisał Impos , a w errorze pisze Ci , w której linijce masz błąd , pisze Ci także jaki .

Dokładnie tak. Ja tak samo miałem na początku, ale w końcu zacząłem czytać dokładnie co tam pisze i na prawdę wszystko masz opisane.
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: pawloo5 w Czerwiec 01, 2009, 08:45:16 pm
ok już wiem o co biega dzięki za przywrócenie mnie do porządku xd
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Matim w Czerwiec 01, 2009, 09:56:27 pm
Ale warto napisać rozwiązanie do tego problemu ... może przyda się innym użytkownikom , nie bądźmy pesymistami .
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: pawloo5 w Czerwiec 02, 2009, 07:20:29 pm
jednak nic mi to nie dało ze naprawiłem błąd który opisałem wyżej :
Cytuj
jeszcze zauważyłem ze w katalogu: 9999_NPCBuffer pojawił się plik: __init__.py.error w ktorym jest tresc:

Error on: C:\Documents and Settings\Pawloo\Pulpit\serwerCT1.5\Gameserver\data\scripts\custom\9999_NPCBuffer\__init__.py.error.log
Line: -1 - Column: -1

Traceback (innermost last):
  (no code object) at line 0
SyntaxError: ('Lexical error at line 30, column 56.  Encountered: "\\r" (13), after : ""', ('__init__.py', 30, 56, '         htmltext = "<html><head><body>No Tienes Adena.'))


o co może chodzić??

po jego naprawienie posypała się sera błędów tego pliku przy 56 zdenerwowałem nie i usunąłem pliki dotyczące npc buffera.
musiałem zmieniać cały tekst pliku  __init__.py, każdą linijke

nie wiem dlaczego?
 czy może być to wina plików serwerowych?
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: mariucha w Czerwiec 15, 2009, 11:23:31 am
Zrobiłem wszystko jak tu napisaliściee, jednak w konsoli wyskakuje mi taki błąd ktoś wie o co może chodzić?


-nie ważne poradziłęm sobie sorki za kłopot.
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: MastJedi w Czerwiec 15, 2009, 11:37:58 am
to może podzielisz się z innymi tajemną wiedzą, JAK sobie poradziłeś? Komuś może to też się przydać.

Pozdrawiam
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: mariucha w Czerwiec 15, 2009, 11:46:55 am
zrobiłem podstawowy błąd, teraz jednak mam błąd taki jak opisywany powyżej i nie wiem jak go przeskoczyć, może ktoś zamiescić tu lekarstwo na to:

Error on: C:\Server\gameserver\data\scripts\custom\9999_NPCBuffer\__init__.py.error.log
Line: -1 - Column: -1

Traceback (innermost last):
  (no code object) at line 0
SyntaxError: ('Lexical error at line 30, column 56.  Encountered: "\\r" (13), after : ""', ('__init__.py', 30, 56, '         htmltext = "<html><head><body>No Tienes Adena.'))
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Maślan w Czerwiec 15, 2009, 12:00:06 pm
edytujcie plik __init__.py

tam gdzie występuje:
  htmltext = "<html><head><body>No Tienes Adena.
</body></html>"
zmieńcie na
  htmltext = "<html><head><body>No Tienes Adena</body></html>"
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: mariucha w Czerwiec 15, 2009, 12:32:00 pm
Dzięki pomogło, jednakże jest kolejny błąd mianowicie taki:


Error on: C:\Server\gameserver\data\scripts\custom\9999_NPCBuffer\__init__.py.error.log
Line: -1 - Column: -1

Traceback (innermost last):
  (no code object) at line 0
SyntaxError: ('invalid syntax', ('__init__.py', 38, 33, '                                st.getPlayer().setCurrentHp(st.getPlayer().getMaxHp())'))
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Matim w Czerwiec 15, 2009, 12:47:50 pm
Pokaż script całego Buffera. Zresztą tych nawiasów jest trochę za dużo ... dla przykładu :

Cytuj
.getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().restoreHPMP()
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: mariucha w Czerwiec 15, 2009, 12:51:02 pm
Proszę bardzo, przepisany zywcem z tego tematu ;

import sys
from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from net.sf.l2j.gameserver.datatables import SkillTable
from net.sf.l2j                import L2DatabaseFactory
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

qn = "9999_NPCBuffer"

NPC=[40010]
ADENA_ID=57
QuestId     = 9999
QuestName   = "NPCBuffer"
QuestDesc   = "custom"
InitialHtml = "1.htm"

print "importing custom: 9999: NPCBuffer"

class Quest (JQuest) :

   def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)


   def onEvent(self,event,st):
      htmltext = event
      count=st.getQuestItemsCount(ADENA_ID)
      if count < 150000 or st.getPlayer().getLevel() < 40 :
          htmltext = "<html><head><body>No Tienes Adena</body></html>"
      else:
         st.takeItems(ADENA_ID,0)
         st.getPlayer().setTarget(st.getPlayer())
         
         if event == "1":
            st.takeItems(ADENA_ID,1000)
            st.getPlayer().setCurrentCp(st.getPlayer().getMaxCp())
                                st.getPlayer().setCurrentHp(st.getPlayer().getMaxHp())
                                st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "1.htm"     
            st.setState(COMPLETED)

         #Wind Walk
         if event == "2":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4342,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Decrease Weight
         if event == "3":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4343,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Shield
         if event == "4":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4344,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Might
         if event == "5":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4345,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Mental Shield
         if event == "6":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4346,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Bless the Body
         if event == "7":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4347,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Bless the Soul
         if event == "8":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4348,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Magic Barrier
         if event == "9":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4349,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Resist Shock
         if event == "10":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4350,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Concentration
         if event == "11":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4351,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Berserker Spirit
         if event == "12":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4352,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Bless Shield
         if event == "13":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4353,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Vampiric Rage
         if event == "14":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4354,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Acumen
         if event == "15":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4355,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Empower
         if event == "16":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4356,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Haste
         if event == "17":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4357,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Guidance
         if event == "18":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4358,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Focus
         if event == "19":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4359,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Death Whisper
         if event == "20":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(4360,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         if event == "21":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(271,1).getEffects(st.getPlayer(),st.getPlayer())   
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "22":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(272,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "23":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(273,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "24":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(274,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "25":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(275,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "26":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(276,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "27":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(277,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "28":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(307,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "29":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(309,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "30":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(310,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "31":
            st.takeItems(ADENA_ID,20000)     
            SkillTable.getInstance().getInfo(311,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "32":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(366,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "3.htm"

         if event == "33":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(365,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())         
            return "3.htm"

         if event == "34":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(264,1).getEffects(st.getPlayer(),st.getPlayer())   
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "35":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(265,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "36":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(266,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "37":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(267,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "38":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(268,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "39":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(269,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "40":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(270,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "41":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(304,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "42":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(305,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "43":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(306,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"   

         if event == "44":
            st.takeItems(ADENA_ID,20000)   
            SkillTable.getInstance().getInfo(308,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "45":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(363,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"

         if event == "46":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(364,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"   
             
         if event == "47":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(349,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "4.htm"   
            st.setState(COMPLETED)
           
           
         #Chant of Battle
         if event == "48":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1007,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Shielding
         if event == "49":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1009,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Fire
         if event == "50":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1006,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Flame
         if event == "51":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1002,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of life
         if event == "52":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1229,18).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Fury
         if event == "53":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1251,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Evasion
         if event == "54":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1252,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Rage
         if event == "55":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1253,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Revenge
         if event == "56":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1284,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Vampire
         if event == "57":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1310,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Eagle
         if event == "58":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1309,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Predator
         if event == "59":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1308,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Spirit
         if event == "60":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1362,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #Chant of Victory
         if event == "61":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1363,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)
           
         #chant of magnus
         if event == "62":
            st.takeItems(ADENA_ID,20000)
            SkillTable.getInstance().getInfo(1413,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "5.htm"
            st.setState(COMPLETED)   
         
         #MPreg
         if event == "63":
            st.takeItems(ADENA_ID,1000)
            SkillTable.getInstance().getInfo(1013,32).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "1.htm"     
            st.setState(COMPLETED)         

         #greatmight
         if event == "64":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1388,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #greatshield
         if event == "65":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1389,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #holyresist
         if event == "66":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1392,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #Unholyresist
         if event == "67":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1393,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #pof
         if event == "68":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1356,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #elemtprotect
         if event == "69":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1352,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #wildmagic
         if event == "70":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1303,2).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #advblock
         if event == "71":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1304,3).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #divProtect
         if event == "72":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1353,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #pow
         if event == "73":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1355,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #powi
         if event == "74":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1357,1).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #manaregen
         if event == "75":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1047,4).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)

         #ba
         if event == "76":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1311,6).getEffects(st.getPlayer(),st.getPlayer())
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "2.htm"     
            st.setState(COMPLETED)
                        #noble
         if event == "77":
            st.takeItems(ADENA_ID,25000)
            SkillTable.getInstance().getInfo(1323,1).getEffects(st.getPlayer(),st.getPlayer())
            return "1.htm"     
            st.setState(COMPLETED)
           

         #Cancellation
         if event == "78":
            st.takeItems(ADENA_ID,5000)
            st.getPlayer().useMagic(SkillTable.getInstance().getInfo(9950,1),False,False)
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "1.htm"
            st.setState(COMPLETED)         
           
         if htmltext != event:
            st.setState(COMPLETED)
            st.exitQuest(1)
      return htmltext


   def onTalk (self,npc,player):
      st = player.getQuestState(qn)
      htmltext = "<html><head><body>I have nothing to say to you</body></html>"
      st.setState(State.STARTED)
      return InitialHtml

QUEST       = Quest(QuestId,str(QuestId) + "_" + QuestName,QuestDesc)

for npcId in NPC:
 QUEST.addStartNpc(npcId)
 QUEST.addTalkId(npcId)



//Matim , wszelkie kody itp umieszczamy w odpowiednim "bloku" , tak jak zrobiłem to ja
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: mariucha w Czerwiec 15, 2009, 01:02:40 pm
Matim a miałbyś czas żeby te bloki porobić w skrypcie jak mają być?
Bo nie tylko ja mam taki problem, a temat bedzie powracał, z góry dzięki
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Matim w Czerwiec 15, 2009, 01:13:58 pm
Pisząc bloki miałem na myśli :

Cytuj

lub :


 :)

Co do buffera to zaraz go naprawię . Cierpliwości tylko przetestuje .

Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: mariucha w Czerwiec 15, 2009, 01:15:55 pm
oki dzięki, ja w tym czasie sprawdzę twojego npc vote :p czekam na poprawionego NPC Buffera jeszcze raz thx
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Matim w Czerwiec 16, 2009, 11:14:54 am
mariucha - przepraszam, ale aktualnie nie mam żadnego clienta L2 na dysku, ale w tym czasie możesz przecież użyć innych gotowych NPC Bufferów, lub L2J Buff Creator'a autorstwa DragonHunter'a, a o to link do niego :

Click (http://www.maxcheaters.com/forum/index.php?topic=50065.0)

Ten owy program automatycznie wygeneruje Ci skrypt i html'e do buffera. Jeśli chcesz mieć już gotowego to przeszukaj : www.maxcheaters.com lub www.ragezone.com
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: mariucha w Czerwiec 16, 2009, 01:23:27 pm
Dzięki poszukam i na pewno cos znajde, chciałem tylko zasygnalizować, że poradnik zawiera błędy.
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Matim w Czerwiec 16, 2009, 01:24:44 pm
Znajdę chwilę czasu to go zredaguje .
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: piterrr70 w Luty 17, 2010, 03:20:27 pm
Witam czy mógłby ktoś te skrypty poprawić, sambym poprawił jak bym wiedział jak  :P
Matim czy naprawiłeś te skrypty jak tak to plz. wstaw w temat napewno się komuś przydadzą. Z góry dzięki  8)
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: piterrr70 w Luty 17, 2010, 03:33:45 pm
Ok poradziłem sobie z poprzednim błędem ale z tym to już nie :D
Error on: D:\serwer\serwerCT1.5\Gameserver\data\scripts\custom\9999_NPCBuffer\__init__.py.error.log
Line: -1 - Column: -1

Traceback (innermost last):
  File "__init__.py", line 2, in ?
ImportError: no module named net

hmm... co jest z tym nie tak  :x
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Luno w Luty 17, 2010, 06:32:33 pm
Traceback (innermost last):
  File "__init__.py", line 2, in ?
ImportError: no module named net[/code]

hmm... co jest z tym nie tak  :x

Tak jak mówi komunikat błędu "no module named net", zgaduje, że chcesz użyć skryptu, który znajduje się parę postów wyżej, gdzie mamy importu chociażby

from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from net.sf.l2j.gameserver.datatables import SkillTable
from net.sf.l2j                import L2DatabaseFactory
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

Czyli (czytamy) "Z modulu net.sf.l2j.(...)  zaimportuj L2PcInstance" itd.
A jeśli używasz nowego kodu l2j, to tam takich modułów nie uświadczysz (moduly jythonowe, są mapowane na pakiety javowe). Struktura pakietów w l2j wygląda teraz "com.l2jserver....".
Musisz to po prostu poprawić.
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: piterrr70 w Luty 17, 2010, 11:07:22 pm
Mam pliki l2jfree i zmieniłem na :
import sys
from com.l2jfree.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from com.l2jfree.gameserver.datatables import SkillTable
from com.l2jfree.gameserver.model.quest import State
from com.l2jfree.gameserver.model.quest import QuestState
from com.l2jfree.gameserver.model.quest.jython import QuestJython as JQuest

lecz nie będzie:
Error on: D:\serwer\serwerCT1.5\Gameserver\data\scripts\custom\997_Buffer\__init__.py.error.log
Line: -1 - Column: -1

Traceback (innermost last):
  File "__init__.py", line 569, in ?
TypeError: com.l2jfree.gameserver.model.quest.State(): expected 0 args; got 2

Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Luno w Luty 18, 2010, 12:44:35 am
Nie widze tu zadnego jawnego tworzenia State, co dokladnie zawiera ta linijka kodu, o ktora sie pluje ?

Btw, ten kod ma w sobie troche innego typu usterek:

1) Ma przemasakryczna ilosc powtorzonego kodu ( zrobionego metoda copy&paste ), co nie tylko wyglada tragicznie, ale jest tragiczne w utrzymaniu i ewentualnych zmianach, znalezienie bledu jest ciezkie.

2) W ifach jest tu taka kolejnosc:
if event == "78":
            st.takeItems(ADENA_ID,5000)
            st.getPlayer().useMagic(SkillTable.getInstance().getInfo(9950,1),False,False)
            st.getPlayer().setCurrentMp(st.getPlayer().getMaxMp())
            return "1.htm"
            st.setState(COMPLETED)
Oczywistym jest ze to setState sie nigdy nie wykona

tak samo na koncu jest
if htmltext != event:
            st.setState(COMPLETED)
            st.exitQuest(1)
ktore tez sie nigdy nie wykona, bo sterowanie tu nie ma szans dojsc.

Sugeruje uprzątniecie tego kodu w nastepujący sposob:

import sys
from com.l2jfree.gameserver.model.actor.instance import L2PcInstance
from java.util import Iterator
from com.l2jfree.gameserver.datatables import SkillTable
from com.l2jfree.gameserver.model.quest import State
from com.l2jfree.gameserver.model.quest import QuestState
from com.l2jfree.gameserver.model.quest.jython import QuestJython as JQuest

qn = "9999_NPCBuffer"

NPC = [40010]
ADENA_ID = 57
QuestId = 9999
QuestName = "NPCBuffer"
QuestDesc = "custom"
InitialHtml = "1.htm"

print "importing custom: 9999: NPCBuffer"

BUFFS = {
  #event id, adena, sk_id, sk_lv, html
    "2":[25000, 4342, 2, "2.htm"], #Wind walk
    "3":[25000, 4343, 3, "2.htm"], #Decrease weight
    "4":[25000, 4344, 3, "2.htm"], #Shield
    "5":[25000, 4345, 3, "2.htm"], #Might
    "6":[25000, 4346, 4, "2.htm"], #Mental Shield
    "7":[25000, 4347, 6, "2.htm"], #Bless the body
    "8":[25000, 4348, 6, "2.htm"], #Bless the soul
    "9":[25000, 4349, 2, "2.htm"], #Magic Barrier
    "10":[25000, 4350, 4, "2.htm"], #Resist Shock
    "11":[25000, 4351, 6, "2.htm"], #Concentration
    "12":[25000, 4352, 2, "2.htm"], #Berserker Spirit
    "13":[25000, 4353, 6, "2.htm"], #Bless Shield
    "14":[25000, 4354, 4, "2.htm"], #Vampiric Rage
    "15":[25000,4355,3,"2.html"], #Acumen
    "16":[25000,4356,3,"2.html"], #Empower
    "17":[25000,4357,2,"2.html"], #Haste
    "18":[25000,4358,3,"2.html"], #Guidance
    "19":[25000,4359,3,"2.html"], #Focus
    "20":[25000,4360,3,"2.html"], #DeathWhisper
    "21":[20000,271,1,"3.html"],
    "22":[20000,272,1,"3.html"],
    "23":[20000,273,1,"3.html"],
    "24":[20000,274,1,"3.html"],
    "25":[20000,275,1,"3.html"],
    "26":[20000,276,1,"3.html"],
    "27":[20000,277,1,"3.html"],
    "28":[20000,307,1,"3.html"],
    "29":[20000,309,1,"3.html"],
    "30":[20000,310,1,"3.html"],
    "31":[20000,311,1,"3.html"],
    "32":[20000,366,1,"3.html"],
    "33":[20000,365,1,"3.html"],
    "34":[20000,264,1,"4.html"],
    "35":[20000,265,1,"4.html"],
    "36":[20000,266,1,"4.html"],
    "37":[20000,267,1,"4.html"],
    "38":[20000,268,1,"4.html"],
    "39":[20000,269,1,"4.html"],
    "40":[20000,270,1,"4.html"],
    "41":[20000,304,1,"4.html"],
    "42":[20000,305,1,"4.html"],
    "43":[20000,306,1,"4.html"],
    "44":[20000,308,1,"4.html"],
    "45":[20000,363,1,"4.html"],
    "46":[20000,364,1,"4.html"],
    "47":[20000,349,1,"4.html"],
    "48":[20000,1007,3,"5.html"], #ChantofBattle
    "49":[20000,1009,3,"5.html"], #ChantofShielding
    "50":[20000,1006,3,"5.html"], #ChantofFire
    "51":[20000,1002,3,"5.html"], #ChantofFlame
    "52":[20000,1229,18,"5.html"], #Chantoflife
    "53":[20000,1251,2,"5.html"], #ChantofFury
    "54":[20000,1252,3,"5.html"], #ChantofEvasion
    "55":[20000,1253,3,"5.html"], #ChantofRage
    "56":[20000,1284,3, "5.html"], #ChantofRevenge
    "57":[20000,1310,4,"5.html"], #ChantofVampire
    "58":[20000,1309,3,"5.html"], #ChantofEagle
    "59":[20000,1308,3,"5.html"], #ChantofPredator
    "60":[20000,1362,1,"5.html"], #ChantofSpirit
    "61":[20000,1363,1,"5.html"], #ChantofVictory
    "62":[20000,1413,1,"5.html"], #chantofmagnus
    "63":[1000,1013,32,"1.html"], #MPreg
    "64":[25000,1388,3,"2.html"], #greatmight
    "65":[25000,1389,3,"2.html"], #greatshield
    "66":[25000,1392,3,"2.html"], #holyresist
    "67":[25000,1393,3,"2.html"], #Unholyresist
    "68":[25000,1356,1,"2.html"], #pof
    "69":[25000,1352,1,"2.html"], #elemtprotect
    "70":[25000,1303,2,"2.html"], #wildmagic
    "71":[25000,1304,3,"2.html"], #advblock
    "72":[25000,1353,1,"2.html"], #divProtect
    "73":[25000,1355,1,"2.html"], #pow
    "74":[25000,1357,1,"2.html"], #powi
    "75":[25000,1047,4,"2.html"], #manaregen
    "76":[25000,1311,6,"2.html"], #ba
    "77":[25000,1323,1,"1.html"]  #noble
}

class Quest (JQuest) :

    def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr)

    def buffPlayer(self, event, st):
        if not BUFFS.has_key(event):
            return event
       
        adena, skill_id, skill_lv, html = BUFFS[event]
        player = st.getPlayer()
       
        st.takeItems(ADENA_ID, adena)
        SkillTable.getInstance().getInfo(skill_id, skill_lv).getEffects(player, player)
        player.setCurrentMp(player.getMaxMp())
       
        return html     


    def onEvent(self, event, st):
        player = st.getPlayer()
        htmltext = event
        if st.getQuestItemsCount(ADENA_ID) < 150000 or player.getLevel() < 40 :
            htmltext = "<html><head><body>No Tienes Adena</body></html>"
        else:
            player.setTarget(st.getPlayer())
           
            if event == "1":
                st.takeItems(ADENA_ID, 1000)
                player.setCurrentCp(player.getMaxCp())
                player.setCurrentHp(player.getMaxHp())
                player.setCurrentMp(player.getMaxMp())
                htmltext = "1.htm"     
            elif event == "78": #cancellation
                st.takeItems(ADENA_ID, 5000)
                player.useMagic(SkillTable.getInstance().getInfo(9950, 1), False, False)
                player.setCurrentMp(player.getMaxMp())
                htmltext = "1.htm"
            else:
                htmltext = self.buffPlayer(event, st)
   
        return htmltext


    def onTalk (self, npc, player):
        st = player.getQuestState(qn)
        st.setState(State.STARTED)
        return InitialHtml

QUEST = Quest(QuestId, str(QuestId) + "_" + QuestName, QuestDesc)

for npcId in NPC:
    QUEST.addStartNpc(npcId)
    QUEST.addTalkId(npcId)
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: piterrr70 w Luty 18, 2010, 11:05:01 am
Error on: D:\serwer\serwerCT1.5\Gameserver\data\scripts\custom\997_Buffer\__init__.py.error.log
Line: -1 - Column: -1

Traceback (innermost last):
  (no code object) at line 0
SyntaxError: ('invalid syntax', ('__init__.py', 117, 9, '        st.takeItems(ADENA_ID, adena)'))

Next error.

Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Luno w Luty 18, 2010, 05:12:45 pm
Taki blad masz dokladnie na tym skrypcie co wkleilem wyzej ?
Bo patrzac po numeracji wierszy, to niezbyt.
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: piterrr70 w Luty 18, 2010, 05:42:12 pm
tak na tym co wkleiłeś  :? i nie mogę go rozgryźć
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Luno w Luty 20, 2010, 08:08:34 pm
Nie mam jak tego przetestowac "na żywo", ale jak napisałem w pythonie klasy dla Playera i State i odpalilem to jako program pythonowy, to wszystko dziala jak powinno, bez bledow.

Upewnij sie ze przekopiowales poprawnie ( czy przez przypadek sie wciecia gdzies nie popsuly ).
W razie czego zamieszczam jeszcze wersje w pliku.

Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: piterrr70 w Luty 20, 2010, 08:41:39 pm
ok buffer działa  :)
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Slynx w Wrzesień 25, 2010, 12:04:17 am
Sorq, że odświeżam temat, ale to przy okazji nawiązanie do tego, bo czytając to wszystko jednego nie rozumiem, tj. nie znalazłem odp. pisząc własnego buffera. Mianowicie skill "Cancellation", który jest podpisany pod Id 9950. Tylko, że skill o takim Id nie istnieje, więc nie bardzo rozumiem sens tego jak i samo działanie (lub raczej nie-działanie).
Luno ładnie przepisał kod i zrobił to na tablicach, wyodrębnił ten skill, więc pewnie zna odpowiedź.
Zwyczajnie wydaje mi się to trochę dziwne rozwiązanie, no ale zobaczymy co inni mają do powiedzenia...
-------
Ok, już nie ważne. Znalazłem o wiele ładniejszą funkcję. Nie dość, że działa to wygląda estetyczniej ;)
Tak więc błąd w bufferze błędem, ale sorki za wskrzeszanie tematu ;)
Tytuł: Odp: [Poradnik]NPC Buffer
Wiadomość wysłana przez: Luno w Wrzesień 29, 2010, 11:09:39 pm
Szczerze mowiac, nawet nie sprawdzalem czy jest taki skill ani co dokladnie by robil, wydzielilem dlatego, ze jego uzycie bylo inaczej zrobione, a nie zaglebialem sie zbytnio :) chcialem tylko uporzadkowac troche ten kod.

Jesli to ma byc po prostu usuniecie wszystkich buffow, to fakt, wystarczy wywolac jedna metode.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Manhuntt w Styczeń 22, 2012, 05:17:08 pm
Witam,
Mam problem z tym bufferem  w momencie gdy chce wgrac  tego npc do bazy mysql to wywala mi taki blad : 1048 - Column 'runspd' cannot be null ktos wie o co chodzi prosze o pomoc (zaznaczam ze zrobilem w wszystko tak jak Maślan opisał).
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Nayana w Styczeń 24, 2012, 09:47:15 am
Witam,
Mam problem z tym bufferem  w momencie gdy chce wgrac  tego npc do bazy mysql to wywala mi taki blad : 1048 - Column 'runspd' cannot be null ktos wie o co chodzi prosze o pomoc (zaznaczam ze zrobilem w wszystko tak jak Maślan opisał).


Wyjście 1

Jeżeli wgrywasz przez nawicata, to żeby nie mieć błędu musisz sprawdzić ilość kolumn npck'a i ilość kolumn na twoim serwerze. Jeżeli wszystko się zgadza, to sprawdź (jeżeli np wyskakuje Ci błąd z runspd, to zobacz w której kolumnie znajduje się w folderze, który ściągnąłeś, a w której kolumnie w twoim navicacie, jeżeli jest to ta sama cyfra, nie ma mowy o błędzie) czy wszystko dobrze zrobiłeś.Możesz ew. sprawdzić, czy nie masz takiego już npcka w bazie danych.

Wyjście 2

Drugim wyjściem, jakie mogę Ci zaproponować, jest wgranie "ręczne" do bazy danych. Po prostu tworzysz nową tabelę, i wpisujesz pokolei, ID,IDTemplated,Name itp. Dzięki temu rozwiązaniu, możesz mieć później kłopoty (tak słyszałem), ale jak jeszcze się w to bawiłem, i wgrywałem npcka ręcznie, to żadnych problemów nie doświadczyłem.

Wyjście 3

Pamiętaj o tym, że wszędzie musi być jakaś cyfra. W żadnym wypadku, nie możesz pozostawić np. "". Musi to być "0", ale nigdy puste. Sprawdź, czy nie masz tak w runspd.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Manhuntt w Styczeń 24, 2012, 06:20:52 pm
Nie mam pojęcia jak zrobić 1wyjscie 2wpisalem ręcznie i spawnuje mi npc ale nie widzę go no i jak kliknę na niego i biorę q wtedy mam komunikat "you are either not on a quest that involves this NPC,or you don't meet this npc's minimum quest requirements." i nie wiem co jest gdzie znajdę tego runspd bo nie wiem gdzie szukać :( a buffera nie ściągałem zrobiłem krok po kroku jak pisal maslan chyba muszę sobie odpuścić buffera na servie bo za długo sie z tym mecze tak samo jak z global gk i gm shop ^^.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Nayana w Styczeń 24, 2012, 06:30:56 pm
Nie mam pojęcia jak zrobić 1wyjscie 2wpisalem ręcznie i spawnuje mi npc ale nie widzę go no i jak kliknę na niego i biorę q wtedy mam komunikat "you are either not on a quest that involves this NPC,or you don't meet this npc's minimum quest requirements." i nie wiem co jest gdzie znajdę tego runspd bo nie wiem gdzie szukać :( a buffera nie ściągałem zrobiłem krok po kroku jak pisal maslan chyba muszę sobie odpuścić buffera na servie bo za długo sie z tym mecze tak samo jak z global gk i gm shop ^^.
Przecież to są najprostsze rzeczy jakie mogą być. Odpalasz nawicata, wklejasz npcki, podmieniasz html'e, //spawn 1234 i masz gotowe.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Manhuntt w Styczeń 24, 2012, 06:40:35 pm
Może i są to proste sprawy ale widzisz jak sie pracuje po 10-12 godzin dziennie,ma sie żonę i od dość długiego czasu nie bawiło się serwerem to teraz jest to trudne :) nawet baaaardzo trudne dlatego pisze tutaj bo wole zapytać,zrobić tak jak ktoś odpowie i pobawić się z godzinę na serwie  kiedyś to robiłem i działało ale na  Gracji a teraz odpaliłem Freye i sa problemy :( mógłbyś dać jakiś konkretny link do takich npc'kow (tzn. global gk,buffer,gm shop)?? ale wracajac do tematu i tak będę próbował zrobić tego buffera :) zajmie mi to dość dużo czasu ale uda mi się bo jestem strasznie uparty ... :) dziękuje ze tak szybko odpisałeś .
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Nayana w Styczeń 24, 2012, 07:22:47 pm
Link do gotowego GM Shop'a :

http://www.4shared.com/file/2DucTTLv/Freya_Shop_By_Lucifer.html
Autor: Lucifer

Link do gotowego Global Gatekeepera :

http://www.4shared.com/file/SJfqFViY/Freya_GK_By_Lucifer.html
Autor: Lucifer

Link do gotowego Buffera :

http://www.4shared.com/file/ZHuorANE/Freya_Buffer_By_Lucifer.html
Autor : Lucifer

Polecam się na przyszłość :)
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Manhuntt w Styczeń 24, 2012, 08:03:34 pm
Dziękuje ci bardzo za szybką i bardzo przydatna pomoc,pobrałem wszystko :) ale i tak nie działa w każdym razie dziękuje ci  :)
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Nayana w Styczeń 24, 2012, 08:36:41 pm
Jakiej paczki używasz? Postaram Ci się pomóc.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: GenesiZ w Styczeń 24, 2012, 08:37:15 pm
Nayana, plusik :)
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Manhuntt w Styczeń 24, 2012, 08:45:02 pm
przypomnialem sobie o 2 wyjsciu i wlasnie postawilem gm shop !!! :) dziekuje,bede mial prosbe ale to napisze na pm jak zrobie jeszcze buffera i gk :)
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Nayana w Styczeń 24, 2012, 08:45:37 pm
Nayana, plusik :)

Jednak genek czuwa ze mną, w tematach stawiania serwerów!
Świetnie, myślałem, że już nikt tu nie zagląda.

Co do Manhuntt, to mogę zrobić Ci poradnik, w którym będzie wszystko ładnie opisane, jak wgrać npcki, jakie ewentualne mogą być przeszkody z ich wgraniem itp.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Manhuntt w Styczeń 24, 2012, 09:01:07 pm
wiesz co bardziej zalezalo by mi na kontakcie z toba bo widzisz tak jak pisalem duzo pracuje,mam zone a co za tym idzie malo czasu w lutym sie przeprowadzam i na prawde nie mam kiedy grac dlatego robie serwer tylko dla siebie zeby nie bylo zdziwienia np: wchodze po miesiacu bez l2 a tu byl wipe ^^,zrobilem juz sobie np: moby na hb,kolorowe poswiaty zalezne od stopnia enchantu broni itp... jak bys mogl to daj mi swoje gg bo na 100% bedemial kolejne pytania/problemy  a jesli ty mi pomozesz to nie bede musial  tutaj postow pisac :) chyba ze wolisz to nie ma problemu. moge podpowiedziec jak poustawiam npc'ki to bedesie bawil ustawieniem Offline bo nie dziala ale to w przyszlym tygodniu jak bede mial chwile.  i popieram PLUS OGROMNY PLUS DLA CIEBIE !! własnie mam problem z bufferem chce go wpisac recznie ale nie moge boma takie ID "1000003" masz jakis sposob na to  ?? ;)
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: GenesiZ w Styczeń 24, 2012, 09:28:24 pm
Według mnie, najlepiej wpisywać sobie wszystkie nowe NPC'ki w tabeli custom_npc, wtedy jest najmniej zamieszania z wpisywaniem. Ale jeśli chcesz wpisać tego npcka, to najlepiej zjedź na sam koniec w tabeli npc, zobacz jakie jest ostatnie ID npcka, a następnie wpisz swojego buffera. Np. jeżeli ostatni npc ma ID 77777 to wpisujesz 77778, tylko pamiętaj żeby też zmienić ID w pliku buffera na takie samo.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Nayana w Styczeń 24, 2012, 09:47:36 pm
Według mnie, najlepiej wpisywać sobie wszystkie nowe NPC'ki w tabeli custom_npc, wtedy jest najmniej zamieszania z wpisywaniem. Ale jeśli chcesz wpisać tego npcka, to najlepiej zjedź na sam koniec w tabeli npc, zobacz jakie jest ostatnie ID npcka, a następnie wpisz swojego buffera. Np. jeżeli ostatni npc ma ID 77777 to wpisujesz 777778, tylko pamiętaj żeby też zmienić ID w pliku buffera na takie samo.
Dokładnie.

Btw: Jeżeli będziesz pisał posty tutaj, to zawsze ktoś - kto miał ten sam problem co Ty, znajdzie w nim odpowiedź.
Ale jeżeli chcesz moje gg, to proszę - 37515928
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Greaver178 w Maj 07, 2012, 12:49:59 pm
Witam (Na wstępie powiem, że jestem tu nowy)

Mam problem z działeniem NPC buffera na mojim serverze Lineage 2.
Kożystam z plików pobranych z tej strony: http://www.l2jserver.com/nightly/index.php?dir=old%2FInterlude%2F
Problem polega na tym, że po wybraniu odpowiedniego buffa wyskakuje mi puste okienko Z tytulem Script Error
Domyślam sie ze coś może być nie tak w pliku __init__.py ,  ale specjalistą nie jestem. Chciał bym aby po kliknięciu na buff i kolejno zabaffowaniu program skierował gracza do miejsca skąd wybrał buffa. Jeśli ktoś bedzie w stanie to zrobić będe bardzo wdzięczny :)

Oto Link to mojego buffera: https://rapidshare.com/files/1317432717/NPC-Buffer-by-H0M3R.exe

Jeżeli popełniłem jakieś błedy co to struktury postu to bardzo przepraszam ;S.

Pozdrawiam Greaver178
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Nayana w Maj 07, 2012, 09:10:33 pm
Witam (Na wstępie powiem, że jestem tu nowy)

Mam problem z działeniem NPC buffera na mojim serverze Lineage 2.
Kożystam z plików pobranych z tej strony: http://www.l2jserver.com/nightly/index.php?dir=old%2FInterlude%2F
Problem polega na tym, że po wybraniu odpowiedniego buffa wyskakuje mi puste okienko Z tytulem Script Error
Domyślam sie ze coś może być nie tak w pliku __init__.py ,  ale specjalistą nie jestem. Chciał bym aby po kliknięciu na buff i kolejno zabaffowaniu program skierował gracza do miejsca skąd wybrał buffa. Jeśli ktoś bedzie w stanie to zrobić będe bardzo wdzięczny :)

Oto Link to mojego buffera: https://rapidshare.com/files/1317432717/NPC-Buffer-by-H0M3R.exe

Jeżeli popełniłem jakieś błedy co to struktury postu to bardzo przepraszam ;S.

Pozdrawiam Greaver178
1. Wszystkie pliki zostały wgrane prawidłowo? Jeżeli tak to wgraj screena.
2. Na pewno dobrze go skonfigurowałeś? Miejsce plików, etc.
3. Polecam Ci pobrać inną paczkę, jeżeli bawisz się tylko w stawianie głównie dla celów osobistych to - http://www.l2jfrozen.com/, jeżeli planujesz w przyszłości postawić serwer dla szerszej gruby osób, to - http://acis.i-live.eu/.
4. Na moje - ściągnij frozena, wgraj buffera i napisz czy działa.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Greaver178 w Maj 08, 2012, 02:38:43 pm
Tak wszystkie pliki zostały wgrane prawidłowo, ale nie wiem ocb bo gdy wchodze na stronke frozena do działu download to w podfolderze npc interlude nie ma nic ;S znalazłem jakiegoś npc by frozen na necie ale nie wiem gdzie dać nie które pliki.
 Oto link do buffera

http://search.4shared.com/postDownload/KCocB_WU/NPC_Buffer_L2_J_Frozen.html

chodzi o pliki w folderze arquivos da pasta 9999_NPCBuffer.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Alvardo w Maj 08, 2012, 04:38:07 pm
http://www.l2jfrozen.com/index.php?topic=202.240 tu masz najnowszy rev frozena. Jest wbudowany buffer tylko podczaj instalacji bazy mysql daj "Install Custom Npc" i w grze komenda //spawn ID NPC
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Greaver178 w Maj 09, 2012, 02:41:41 am
Sciągnąłem paczki z L2jFrozen wszystko ładnie działa, ale buffera musiałem i tak wgrywać, zkorzystałem z Buffera na tej stronie (Post nr 13):

http://www.l2jfrozen.com/index.php?action=profile;u=357;area=showposts

Dzięki wielkie za pomoc :)
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Scythe w Styczeń 10, 2013, 07:41:35 pm
Co zrobić, gdy wywala ''You are either not carrying out your quest or don't meet the criteria" po kliknięciu buff me? Tworzę właśnie serwer na L2j Interlude i żaden buffer nie chce mi działać, nawet ten z tego tematu.
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: MostDope w Styczeń 10, 2013, 07:47:35 pm
Co zrobić, gdy wywala ''You are either not carrying out your quest or don't meet the criteria" po kliknięciu buff me? Tworzę właśnie serwer na L2j Interlude i żaden buffer nie chce mi działać, nawet ten z tego tematu.
Jakich dokładnie plików używasz i czy na pewno nie masz żadnych problemów z wgraniem plików NPC?
Tytuł: Odp: [Poradnik] NPC Buffer
Wiadomość wysłana przez: Scythe w Styczeń 10, 2013, 08:15:28 pm
http://www.l2jserver.com/nightly/index.php?dir=old%2FInterlude%2F (http://www.l2jserver.com/nightly/index.php?dir=old%2FInterlude%2F)

Użyłem tych plików. Przy wrzucaniu .sql od buffera nie było żadnych błędów. W konsoli od game server podczas ładowania serwera wyskakuje: failed to import quest : 15010_NPCBuffer

Wczoraj dodałem GM-Shop i nie było żadnych problemów.

edit: http://forum.lineage2.com.pl/index.php/topic,48679.0.html (http://forum.lineage2.com.pl/index.php/topic,48679.0.html) to ten buffer i dokładnie ten sam problem