Kod ten dziala napewno w oparciu o pliki l2jserver Gracia Final
1. Wejdz do folderu gamserver/data i edytuj plik scripts.cfg dodajac w nim na samym dole taka linijke:
# Custom Teleports
teleports/1142_Custom_Gate/__init__.py
2.Przejdz teraz do katalogu gameserver/data/scripts/teleports/ i utworz w nim katalog o nazwie: 1142_Custom_Gate
3.Wejdz do utworzonego katalogu i utworz plik tekstowy nazywajac go: __init__.py
4. Wklej zawartosc ktora podam nizej do pliku z pkt 3
# Custom_Gate - by Naito
import sys
from com.l2jserver.gameserver.model.actor.instance import L2PcInstance
from com.l2jserver.gameserver.model.quest import State
from com.l2jserver.gameserver.model.quest import QuestState
from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest
qn = "1142_Custom_Gate"
TOKEN = 110001
COIN = 110002
DATA={
11000:[174289,-86424,-5108], #Teleport pierwszy ktory powinien miec takie samo ID jak nazwa pliku htm w ktorym beda podane odpowiednie opcje teleportow
}
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onAdvEvent (self,event,npc, player) :
htmltext = event
st = player.getQuestState(qn)
if not st : return
if event.isdigit():
dest=int(event)
if dest in DATA.keys():
x,y,z=DATA[dest]
if x and y and z:
if st.getQuestItemsCount(TOKEN) > 0 and st.getQuestItemsCount(COIN) > 0:
st.takeItems(TOKEN,0) and st.takeItems(COIN,0)
st.getPlayer().teleToLocation(x,y,z)
else:
st.exitQuest(1)
return "Musisz posiadac TOKEN i COIN aby skorzystac z teleportu"
st.exitQuest(1)
return
def onTalk (Self,npc,player):
st = player.getQuestState(qn)
npcId = npc.getNpcId()
if player.getLevel() <= 74:
htmltext="1.htm"
st.exitQuest(1)
else:
htmltext=str(npcId)+".htm"
return htmltext
QUEST = Quest(-1,qn,"Teleports")
for i in DATA.keys() :
QUEST.addStartNpc(i)
QUEST.addTalkId(i)
Npc ten bedzie wymagal aby gracz mial przy sobie wiecej niz 0 TOKEN i COIN za co odpowiada ta linijka:
if st.getQuestItemsCount(TOKEN) > 0 and st.getQuestItemsCount(COIN) > 0:
Jak rowniez nie zabierze tych przedmitow graczowi za co odpowiada ta linijka kodu:
st.takeItems(TOKEN,0) and st.takeItems(COIN,0)
Oczywiscie nie koniecznie musi tak byc mozna to zmienic tak aby wymagaly przedmioty i aby je zabieraly mysle ze jasno widac jak to zmienic.
5. Utworz w tym katalogu plik o nazwie 1.htm i wklej do niego te zawartosc:
<html><title>Custom Gate by Naito</title>
<body>
<center>
Gate Information:<br><br>
If u want use teleport, you must have 74 lvl or above
</center>
</body></html>
linjka ktora odpowiada za wymagany poziom gracza:
if player.getLevel() <= 74:
6. Utworz kolejny plik htm , nazwij go tak jak ID pierwszego teleportu czyli 11000.htm i wklej do niego te zawartosc:
<html><title>Custom Gate by Naito</title>
<body>
<br>
Custom Teleport Manager:<br>
<br>
<a action="bypass -h Quest 1142_Custom_Gate 11000">Teleprot Me !</a>
</body></html>
7. Edytuj kod html npc w ktorym chcesz aby byly te teleporty i dodaj w nim taki wpis:
<a action="bypass -h npc_%objectId%_Quest 1142_Custom_Gate">Custom Teleport Manager</a>
8. Oczywiscie aby npc wymagal itemow o id ktorych uzylem musza byc one wczesniej dodane do bazy danych w tabeli etcitem
za pomoca takich polecen:
INSERT INTO `etcitem` (`item_id`, `name`, `additionalname`, `crystallizable`, `item_type`, `weight`, `consume_type`, `material`, `crystal_type`, `duration`, `time`, `price`, `crystal_count`, `sellable`, `dropable`, `destroyable`, `tradeable`, `depositable`, `handler`, `skill`) VALUES
(110001, 'Token', '', 'false', 'quest', 5, 'stackable', 'gold', 'none', 1, 43200, 1, 0, 'false', 'false', 'true', 'false', 'false', 'none', '0-0;'),
(110002, 'Coin', '', 'false', 'quest', 5, 'stackable', 'gold', 'none', 1, 43200, 1, 0, 'false', 'false', 'true', 'false', 'false', 'none', '0-0;');
To chyba wszystko a jesli sa jakies bledy lub ktos czegos nie rozumie to prosze o poinformowanie mnie o tym postaram sie pomoc.