Перейти к содержанию
Авторизация  
Meg

Что бы скрипт не забирал итем а просто проверял его наличие

Рекомендуемые сообщения

Програмировать не умею, пробовал сам разобраться как сделать, но увы, скрипт все время выдает ошибки.

Менеджер покраски ника на PWSoft, в данный момент он забирает Blue Eva (id 4355) а нужно сделать так что бы он просто проверял есть ли предмет в инвентаре..

Можете пожалуйста подсказать как это сделать?

import sys
from java.lang import System
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 = "q8024_ChgColor"

NPC = 50001

PRICES = {
1: [4355, 3, "Blue Eva"],
2: [4355, 1, "Blue Eva"],
}

COLOURS = {
1: ["00FF00","00FF00"],
2: ["16721c","1c7216"],
3: ["00FFFF","FFFF00"],
4: ["FF0000","0000FF"],
5: ["FFFB00","00FBFF"],
6: ["337fe6","e67f33"],
7: ["DDA0DD","DDA0DD"],
8: ["808080","808080"],
9: ["000000","000000"],
10: ["81c739","81c739"],
11: ["9120b1","b12091"],
12: ["7c2196","96217c"],
13: ["811664","641681"],
14: ["6b4558","58456b"],
}    

class Quest (JQuest) :

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

 def onAdvEvent (self,event,npc,player):
   st = player.getQuestState(qn)
   if event == "step1":
     htmltext = "<html><body><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2><br1>"       
     htmltext += "Что красим?<font color=999966>*</font><br><center><table width=180><tr>"
     htmltext += "<td><button value=\"Ник\" action=\"bypass -h Quest q8024_ChgColor var_1\" width=80 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
     htmltext += "<td width=40></td>"
     htmltext += "<td><button value=\"Титул\" action=\"bypass -h Quest q8024_ChgColor var_2\" width=80 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
     htmltext += "</tr></table></center><br><br><font color=999966>*Изза особенностей ЖК-мониторов, цвета на чаре могут выглядить немного ярче или темнее.</font><br><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32></body></html>"
   elif event.startswith("var_"):
     vtype = int(event.replace("var_", ""))
     if vtype == 1:
       sample = "### " + player.getName() + " ###"
     else:
       sample = "### " + player.getTitle() + " ###"
     htmltext = "<html><body>Покраска:<br>"
     htmltext += "Стоимость: "+str(PRICES[vtype][1])+" "+str(PRICES[vtype][2])+"<br><br>"
     htmltext += "<html><body>>Выберите желаемый цвет из списка:<br><br>"
    #<
     htmltext += "<table width=300>"
     for i in COLOURS.keys():
       htmltext += "<tr><td width=20></td><td><font color="+str(COLOURS[i][1])+">"+str(sample)+"</font></td><td><a msg=\"Точно красим?\" action=\"bypass -h Quest q8024_ChgColor paint_"+str(vtype)+"_"+str(i)+"\">>>>></a></td></tr>"
       htmltext += "<tr><td width=20></td><td><br></td><td></td></tr>"
     htmltext += "</table>"
    #< 
     htmltext += "<a action=\"bypass -h Quest q8024_ChgColor step1\">Вернуться.</a></body></html>"
   elif event.startswith("paint_"):
     get = str(event.replace("paint_", ""))
     vtype,color=get.split("_")
     vtype,color=int(vtype),int(color)
    #<
     paintcolor = int(COLOURS[color][0],16)
     if vtype == 1:
       if st.getQuestItemsCount(PRICES[1][0]) < int(PRICES[1][1]):
         htmltext = "<html><body>Покраска: <font color=74bff5>"+str(PRICES[1][1])+" "+str(PRICES[1][2])+"</font></body></html>"
         return htmltext
       st.takeItems(PRICES[1][0],PRICES[1][1])
       player.getAppearance().setNameColor(paintcolor)
     else:
       if st.getQuestItemsCount(PRICES[2][0]) < int(PRICES[2][1]):
         htmltext = "<html><body>Покраска: <font color=74bff5>"+str(PRICES[2][1])+" "+str(PRICES[2][2])+"</font></body></html>"
         return htmltext
       st.takeItems(PRICES[2][0],PRICES[2][1])
       player.getAppearance().setTitleColor(paintcolor)
    #<
     player.broadcastUserInfo()
     player.store()
     htmltext =  "<html><body>Покраска:<br>Готово.<br><br><br><a action=\"bypass -h Quest q8024_ChgColor step1\">Вернуться.</a></body></html>"
   else:
     htmltext = "<html><body>Покраска:<br>Oops!</body></html>"
   return htmltext

 def onTalk (self,npc,player):
   st = player.getQuestState(qn)
   npcId = npc.getNpcId()
   if npcId == NPC:
     htmltext = "<html><body><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2><br1>"       
     htmltext += "Что красим?<font color=999966>*</font><br><center><table width=180><tr>"
     htmltext += "<td><button value=\"Ник\" action=\"bypass -h Quest q8024_ChgColor var_1\" width=80 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
     htmltext += "<td width=40></td>"
     htmltext += "<td><button value=\"Титул\" action=\"bypass -h Quest q8024_ChgColor var_2\" width=80 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
     htmltext += "</tr></table></center><br><br><font color=999966>*Изза особенностей ЖК-мониторов, цвета на чаре могут выглядить немного ярче или темнее.</font><br><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32></body></html>"
   return htmltext

QUEST       = Quest(8024,qn,"custom")
CREATED     = State('Start', QUEST)

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(NPC)
QUEST.addTalkId(NPC)

 

*я догадываюсь что нужно поменять takeItems на некую фенкцию которая не забирает а проверяет но ничего не выходит..

Изменено пользователем Meg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

itemid > 0 = true

else - false - недостаточно предметов

 

как преобразовать это в правильный код, думаю ,мозгов хватит

самый банальный пример.

Изменено пользователем Khrome

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
st.takeItems(PRICES[1][0],PRICES[1][1])

 

st.takeItems(PRICES[2][0],PRICES[2][1])

убрать эти строки и готово, нужные проверки уже есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
19 часов назад, Khrome сказал:

itemid > 0 = true

else - false - недостаточно предметов

 

как преобразовать это в правильный код, думаю ,мозгов хватит

самый банальный пример.

спасибо попробую)

6 часов назад, Formatter сказал:

st.takeItems(PRICES[1][0],PRICES[1][1])

 


st.takeItems(PRICES[2][0],PRICES[2][1])

убрать эти строки и готово, нужные проверки уже есть.

это гениально!) большое спасибо!

 

Снова обращаюсь за помощью, просидел целый день, перезапускал скрипт наверно раз 200) но видимо интуитивно без знаний программирования это не сделать (или я недогадливый), все время ошибки..

 

Можете пожалуйста подсказать как добавить в этот скрипт что бы разный цвет стоил по разному? или это так просто не реализовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то не выходит сделать разную стоимость для разного цвета, может сюда вообще нельзя добавить это "отдельным элементом" а нужно весь скрипт переделывать?

Изменено пользователем Meg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для каждого цвета отдельные проверки делать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
46 minutes ago, Khrome said:

для каждого цвета отдельные проверки делать

Я тоже об этом думал, но...

 Для теста добавил тут "пункт 5 за 10 блю ева;

(нумерация тут это ведь как индификатор в css?:unsure:)

PRICES = {
1: [4355, 3, "Blue Eva"],
2: [4355, 1, "Blue Eva"],
5: [4355, 10, "Blue Eva"],
}

Дальше сложнее :D я так догадываюсь что тут нужо копировать вот этот кусочек

     paintcolor = int(COLOURS[color][0],16)
     if vtype == 1:
       if st.getQuestItemsCount(PRICES[1][0]) < int(PRICES[1][1]):
         htmltext = "<html><body>Покраска: <font color=74bff5>"+str(PRICES[1][1])+" "+str(PRICES[1][2])+"</font></body></html>"
         return htmltext
       player.getAppearance().setNameColor(paintcolor)

И дописать в PRICES "5"..  т.е так?

     paintcolor = int(COLOURS[color][0],16)
     if vtype == 1:
       if st.getQuestItemsCount(PRICES[5][0]) < int(PRICES[5][1]):
         htmltext = "<html><body>Покраска: <font color=74bff5>"+str(PRICES[5][1])+"
         return htmltext
       player.getAppearance().setNameColor(paintcolor)

Но к моему "удивлению" эта чудо догадайка не запустилась :unknw:

*p.s а что за цифра 16? это максимальное количество цветов или что?

 

Изменено пользователем Meg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ох.. замучался.. не хочет работать и все тут.. что я только не пробовал за эти 2 дня..

Скажите пожалуйста, я совсем не то делаю в поледнем примере да?

 

Изменено пользователем Meg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ты покажи ошибки какие дает

и это питон, тут важно какие знаки пунктуации (если в строке 5 пробелов то таб и 2 пробела будут давать ошибку) может в этом причина

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, Solution сказал:

за 500 рублей на яву перепишу)

продешевил

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, TURGOR said:

ты покажи ошибки какие дает

и это питон, тут важно какие знаки пунктуации (если в строке 5 пробелов то таб и 2 пробела будут давать ошибку) может в этом причина

Ошибка failed to import custom : q8024_ChgColor (ничего больше не пишет)

import sys
from java.lang import System
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 = "q8024_ChgColor"

NPC = 99999

PRICES = {
1: [4355, 30, "Blue Eva"],
2: [4355, 20, "Blue Eva"],
5: [4355, 10, "Blue Eva"],
}

COLOURS = {
1: ["16721c","1c7216"],
2: ["00FFFF","FFFF00"],
3: ["FF0000","0000FF"],
4: ["FFFB00","00FBFF"],
5: ["337fe6","e67f33"],
6: ["DDA0DD","DDA0DD"],
7: ["808080","808080"],
8: ["81c739","81c739"],

9:  ["16721c","1c7216"],
10: ["00FFFF","FFFF00"],
11: ["FF0000","0000FF"],
12: ["FFFB00","00FBFF"],
13: ["337fe6","e67f33"],
14: ["DDA0DD","DDA0DD"],
15: ["808080","808080"],
16: ["81c739","81c739"],
}   

class Quest (JQuest) :

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

 def onAdvEvent (self,event,npc,player):
   st = player.getQuestState(qn)
   if event == "step1":
     htmltext = "<html><body><title>Box</title><br><br><br><br1>"      
     htmltext += "  Что красим?<font color=3aebff>*</font><br><center><table width=180><tr>"
     htmltext += "<td><button value=\"Ник\" action=\"bypass -h Quest q8024_ChgColor var_1\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>"
     htmltext += "<td width=40></td>"
     htmltext += "<td><button value=\"Титул\" action=\"bypass -h Quest q8024_ChgColor var_2\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>"
     htmltext += "</body></html>" 
   elif event.startswith("var_"):
     vtype = int(event.replace("var_", ""))
     if vtype == 1:
       sample = "### " + player.getName() + " ###"
     else:
       sample = "### " + player.getTitle() + " ###"
     htmltext = "<html><body><title>Box</title>  Покраска:<br>"
     htmltext += "  Стоимость: "+str(PRICES[vtype][1])+" "+str(PRICES[vtype][2])+"<br><br>"
     htmltext += "<html><body><title>Box</title>  >Выберите желаемый цвет из списка:<br><br>"
    #<
     htmltext += "<table width=300>"
     for i in COLOURS.keys():
       htmltext += "<tr><td width=20></td><td><font color="+str(COLOURS[i][1])+">"+str(sample)+"</font></td><td><a msg=\"Точно красим?\" action=\"bypass -h Quest q8024_ChgColor paint_"+str(vtype)+"_"+str(i)+"\">>>>></a></td></tr>"
       htmltext += "<tr><td width=20></td><td><br></td><td></td></tr>"
     htmltext += "</table>"
    #< 
     htmltext += "<a action=\"bypass -h Quest q8024_ChgColor step1\">Вернуться.</a></body></html>"
   elif event.startswith("paint_"):
     get = str(event.replace("paint_", ""))
     vtype,color=get.split("_")
     vtype,color=int(vtype),int(color)
    #<
     paintcolor = int(COLOURS[color][0],16)
	 if vtype == 1:
       if st.getQuestItemsCount(PRICES[5][0]) < int(PRICES[5][1]):
         htmltext = "<html><body><title>Box</title>  Покраска: <font color=74bff5>"+str(PRICES[5][1])+"</font></body></html>"
         return htmltext
       player.getAppearance().setNameColor(paintcolor)
     if vtype == 1:
       if st.getQuestItemsCount(PRICES[1][0]) < int(PRICES[1][1]):
         htmltext = "<html><body><title>Box</title>  Покраска: <font color=74bff5>"+str(PRICES[1][1])+" "+str(PRICES[1][2])+"</font></body></html>"
         return htmltext
       player.getAppearance().setNameColor(paintcolor)
     else:
       if st.getQuestItemsCount(PRICES[2][0]) < int(PRICES[2][1]):
         htmltext = "<html><body><title>Box</title>  Покраска: <font color=74bff5>"+str(PRICES[2][1])+" "+str(PRICES[2][2])+"</font></body></html>"
         return htmltext
       player.getAppearance().setTitleColor(paintcolor)
    #<
     player.broadcastUserInfo()
     player.store()
     htmltext =  "<html><body><title>Box</title>  Покраска:<br>  Готово.<br><br><br><a action=\"bypass -h Quest q8024_ChgColor step1\">Вернуться.</a></body></html>"
   else:
     htmltext = "<html><body><title>Box</title>  Покраска:<br>Oops!</body></html>"
   return htmltext

 def onTalk (self,npc,player):
   st = player.getQuestState(qn)
   npcId = npc.getNpcId()
   if npcId == NPC:
     htmltext = "<html><body><title>Box</title><br><br><br><br1>"      
     htmltext += "  Что красим?<font color=3aebff>*</font><br><center><table width=180><tr>"
     htmltext += "<td><button value=\"Ник\" action=\"bypass -h Quest q8024_ChgColor var_1\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>"
     htmltext += "<td width=40></td>"
     htmltext += "<td><button value=\"Титул\" action=\"bypass -h Quest q8024_ChgColor var_2\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td>"
     htmltext += "</body></html>" 
   return htmltext

QUEST       = Quest(8024,qn,"custom")
CREATED     = State('Start', QUEST)

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(NPC)
QUEST.addTalkId(NPC)

*цвета одинковые это я временно для теста поставил, еще не менял сами цвета

Изменено пользователем Meg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Упс.. больше нельзя редактировать сообщение..

Кажется у меня какая-то путаница с else и if.. 

И я только сейчас опомнился что я добавил стоимость третьему типу но нигде не указал какие цвета должны стоить другую цену (3тий тип) сейчас еще подумаю может разберусь)

Изменено пользователем Meg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

image.png.447abb53c51a4b9b6b6fd476a4705e42.png

image.png.cced62e838a8113e97c9c8afdc7605ad.png

включите "отображать все символы" в нотепад++

в вашем варианте должно быть 5 пробелов тут, а не таб и пробел

 

 

и тут вроде одинаковая проверка

image.png.c4df427d528b03f432c8e2c988dd585c.png

 

Изменено пользователем TURGOR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас в прайсе цены за покраску ника и тутула, 1 и 2 соответственно. 

5 нет в варианте

PRICES = {
1: [4355, 30, "Blue Eva"],
2: [4355, 20, "Blue Eva"],
5: [4355, 10, "Blue Eva"],
}

 

5 не сработает

вы когда выбираете что красить ту цену и будет брать 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 minutes ago, TURGOR said:

У вас в прайсе цены за покраску ника и тутула, 1 и 2 соответственно. 

5 нет в варианте

PRICES = {
1: [4355, 30, "Blue Eva"],
2: [4355, 20, "Blue Eva"],
5: [4355, 10, "Blue Eva"],
}

 

5 не сработает

вы когда выбираете что красить ту цену и будет брать 

аааа... понял! кажется теперь все стало на свои места, тогда просто сделаю 3 нопки у нпц, каждую со совими цветами и ценой.

Спасибо огромное!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...