alberto2010
-
Posts
29 -
Joined
-
Last visited
-
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by alberto2010
-
-
-
Hello , there is any python automatic dragon soul refine?
Can't find anything about that and i saw in many clients that they have automatic refine. -
Is there any way to make this one to work with a no-ip dns if i have a dynamic ip ?
-
Hello , How I can increase mob drop level range limit ? right now it is like -+10 levels for each boss.
EX:
Mob 2598 has level 91 , If i kill him when my char has level 100 I get drop but if I kill him when char is level 101-105 , i don't get anything , There is a way to increase mob drop level range limit?
-
hello guys, i want to make a ban command but i have a problem , this is the code:
ACMD(do_ban) { char arg1[256], arg2[256]; const char* name; const char* reason; if (!ch || ch->GetGMLevel() != GM_IMPLEMENTOR) { sys_log(0, "do_ban without rights %s[%d]", ch->GetName(), ch->GetPlayerID()); return; } two_arguments(argument, arg1, sizeof (arg1), arg2, sizeof(arg2)); if (!*arg1 || !*arg2) { ch->ChatPacket(CHAT_TYPE_INFO, "Correct command form: /ban <player name> <reason>"); return; } name = arg1; reason = arg2; LPDESC LDESC = DESC_MANAGER::instance().FindByCharacterName(name); LPCHARACTER LCHARACTER = LDESC ? LDESC->GetCharacter() : NULL; if (!LCHARACTER) { ch->ChatPacket(CHAT_TYPE_INFO, "%s not found.", name); return; } if (LCHARACTER == ch) { ch->ChatPacket(CHAT_TYPE_INFO, "You cant ban yourself!"); return; } if (LCHARACTER->GetGMLevel() >= GM_LOW_WIZARD) { ch->ChatPacket(CHAT_TYPE_INFO, "You cant do that."); return; } LCHARACTER = CHARACTER_MANAGER::instance().FindPC(name); std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET status = 'BLOCK' WHERE id = %d", LCHARACTER->GetAID())); std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE player.player SET reason = %s WHERE id = %d", reason, LCHARACTER->GetAID())); LDESC->DelayedDisconnect(5); sys_log(0, "%s[%d] banned %s with reason: %s", ch->GetName(), ch->GetPlayerID(), name, reason); ch->ChatPacket(CHAT_TYPE_INFO, "%s was banned with reason: %s", name, reason); }
my problem is how i can use two directquery?
i get this when i try to compile:
cmd_gm.cpp:2836: error: redeclaration of 'std::auto_ptr<_SQLMsg> msg'
cmd_gm.cpp:2836: error: 'std::auto_ptr<_SQLMsg> msg' previously declared here
-
Hello guys , i want to change bonuses from this item:
71136 ÇÒ·ÎÀ© »çÅÁ ITEM_COSTUME COSTUME_ACCSLOT 1 ANTI_MYSHOP | ANTI_STACK | ANTI_GIVE | ANTI_SELL | ANTI_DROP NONE NONE NONE 0 0 0 0 0 REAL_TIME 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0
but i don't understand where to put values...
here is what i want to add:
PV: 3000
20% Chance of Critical Hit
25% Chance of Piercing Hit(this is penetrate_pct)
Strong against Half Human +15%
+10 Strength
-
Hello , if i try to close offline shop when my inventory is full , items are deleted.
items are deleted only when inventory is full .
i attached my offlineshop_manager.cpp
I hope some1 can help me with that.
offlineshop_manager.cpp (fixed , i just rewrote some functions as quest.lua and is fine)
-
i don't like to help romanians but .. just install this:
quest fix_bug_string begin state start begin when login begin setskin(NOWINDOW) say_title(" ") return end end end
and if you have quests like this:
quest give_basic_weapon begin state start begin when login with pc.get_level() >= 1 begin say_title("text") say("text") say("text") say("text") say("text") say("text") pc.give_item2(x,y) set_state(endcall) end end state endcall begin end end
you have to rewrite them like this exemple:
quest give_basic_weapon begin state start begin when login with pc.get_level() >= 1 begin timer("give_basic_weapon", 2) end when give_basic_weapon.timer begin say_title("text") say("text") say("text") say("text") say("text") say("text") pc.give_item2(x,y) set_state(endcall) end end state endcall begin end end
- 1
-
Hello guys , any1 know how to add a limit of how many players can be online on a channel ?
-
Hello guys , there is a way to make monsters to don't disappear if you ride a mount and you have big speed?
-
Hello , any1 know how to make a quest to work same as Compass for Metin Stones item ?
I want to use this quest to make a button in inventory to find stones. (In other words i want this compass for metin stones directly in inventory.)
-
I implemented a bonus page board and i have a problem with it when i press button again , this page just show again and again when i press button , not hiding.
These are scripts:
uibonuspage.py
Spoilerimport ui import chat import app import player import snd import item import net import game import uiinventory class BonusBoardDialog(ui.ScriptWindow): MaxBoni = { "0": 20000, "1": 16000, "2": 320, "3": 32, "4": 32, "5": 32, "6": 32, "7": 16, "9": 40, "10": 60, "11": 60, "12": 16, "13": 24, "14": 16, "15": 30, "16": 30, "17": 50, "18": 100, "19": 100, "20": 100, "21": 100, "22": 100, "23": 20, "24": 40, "27": 15, "28": 30, "29": 72, "30": 72, "31": 72, "32": 72, "33": 72, "34": 72, "35": 60, "36": 60, "37": 40, "38": 60, "39": 20, "41": 10, "43": 60, "44": 60, "45": 40, "48": 1, "53": 50 } BonusDict = ["PvP", "PvM", "Lycan"] BonusIDListe = [["", 0, 0],["PV acumulat:", 1, 0],["PM acumulat:", 2, 0],["Viteza farmecului:", 9, 0],["Regenerare PV:", 10, 32],["Regenerare PM:", 11, 33],["ªansa de otrãvire:", 12, 37],["ªansa de blocare:", 13, 38],["ªansa unei lov. critice:", 15, 40],["ªansa unei lov. pãtr:", 16, 41],["Tare împotriva semi-om:", 17, 43],["Tare împotriva animalelor:", 18, 44],["Tare împotriva orcilor:", 19, 45],["Tare împotriva esoteriecilor:", 20, 46],["Tare împotriva vampirilor:", 21, 47],["Tare împotriva diavolului:", 22, 48],["Absorbire PV:", 23, 63],["Absorbire PM:", 24, 64],["Blocare atac corporal:", 27, 67],["Evitare atac cu sãgeþi:", 28, 68],["Apãrare cu sabia:", 29, 69],["Apãrare cu douã mâini:", 30, 70],["Apãrare pumnal:", 31, 71],["Apãrare clopot:", 32, 72],["Apãrare evantai:", 33, 73],["Rezistenþã la sãgeþi:", 34, 74],["Rezistenþã la foc:", 35, 75],["Rezistenþã la magie:", 37, 77],["Rezistenþã la vânt:", 38, 78],["Rezistenþã la otravã:", 41, 81],["Bonus exp acumulat:", 43, 83],["Bonus yang acumulat:", 44, 84],["Bonus drop acumulat:", 45, 85],["APPLY_SKILL", 51, 0],["Valoarea atacului:", 53, 0],["Tare împotriva monstrilor:", 63, 53],["Aparare Impotriva Ghearelor", 142, 142],["Sansa La Sangerare", 138, 138],["Rezistenta La Sangerare", 139, 139]] SpecialBoni = { 1: "Norm.State", 2: "Norm.State", 3: "Norm.State", 4: "Norm.State", 5: "Norm.State", 6: "Norm.State", 55: "Norm.State", 56: "Norm.State", 58: "Norm.State" } PvPOffenseBoni = ["Tare împotriva semi-om:", "ªansa unei lov. critice:", "ªansa unei lov. pãtr:", "Viteza farmecului:", "Valoarea atacului:", "ªansa de otrãvire:", "ªansa de blocare:", "Rezistenþã la otravã:", "Rezistenþã la foc:", "Regenerare PM:"] PvPDefenseBoni = ["Apãrare cu sabia:", "Apãrare cu douã mâini:", "Apãrare pumnal:", "Apãrare clopot:", "Apãrare evantai:", "Rezistenþã la sãgeþi:", "Evitare atac cu sãgeþi:", "Rezistenþã la magie:", "Blocare atac corporal:", "Regenerare PV:"] PvMOffenseBoni = ["PV acumulat:", "Tare împotriva animalelor:", "Tare împotriva vampirilor:", "Tare împotriva orcilor:", "Absorbire PM:", "Rezistenþã la vânt:"] PvMDefenseBoni = ["PM acumulat:", "Tare împotriva monstrilor:", "Tare împotriva diavolului:", "Tare împotriva esoteriecilor:", "Absorbire PV:"] LeftoversOffenseBoni = ["Sansa La Sangerare"] LeftoversDefenseBoni = ["Aparare Impotriva Ghearelor","Rezistenta La Sangerare"] BonusList = [] UI = [] uiinventory.aratabonusuri = 0 TestSystem = 0 ProcessTimeStamp = 0 def __init__(self): ui.ScriptWindow.__init__(self) self.LoadUI() import uiinventory uiinventory.aratabonusuri = 1 def __del__(self): ui.ScriptWindow.__del__(self) self.Board.Hide() uiinventory.aratabonusuri = 0 def LoadUI(self): self.Board = ui.BoardWithTitleBar() self.Board.SetSize(313, 420) self.Board.SetCenterPosition() self.Board.AddFlag("movable") self.Board.AddFlag("float") self.Board.SetTitleName("Pagina De Bonusuri") self.Board.SetCloseEvent(self.__del__) Vertical = ui.Line() Vertical.SetParent(self.Board) Vertical.SetPosition(8, 60) Vertical.SetSize(297, 0) Vertical.SetColor(0xff777777) Vertical.Show() self.UI.append(Vertical) x = 25 for i in xrange(3): ChangeBonusDict = ui.Button() ChangeBonusDict.SetParent(self.Board) ChangeBonusDict.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub") ChangeBonusDict.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub") ChangeBonusDict.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub") ChangeBonusDict.SetText(self.BonusDict[i]) ChangeBonusDict.SetPosition(x, 380) ChangeBonusDict.SetEvent(lambda arg = ChangeBonusDict.GetText(): self.ChangeBonusDict(arg)) ChangeBonusDict.Show() x += 88 self.UI.append(ChangeBonusDict) x = 55 Type = ["Ofensive", "Defensive"] for i in xrange(2): BonusDescription = ui.TextLine() BonusDescription.SetParent(self.Board) BonusDescription.SetPosition(x, 35) BonusDescription.SetText(str(Type[i])) BonusDescription.SetFontColor(1.0, 0.63, 0) BonusDescription.Show() x += 150 self.UI.append(BonusDescription) self.SetBoni(self.BonusDict[0]) self.dict = self.BonusDict[0] self.Board.Show() uiinventory.aratabonusuri = 1 def SetBoni(self, type): Offense = [[25, 70], [25, 100], [25, 130], [25, 160], [25, 190], [25, 220], [25, 250], [25, 280], [25, 310], [25, 340]] Defense = [[170, 70], [170, 100], [170, 130], [170, 160], [170, 190], [170, 220], [170, 250], [170, 280], [170, 310], [170, 340]] for bonus in self.BonusIDListe: if type == self.BonusDict[0]: self.CheckBonus(bonus, self.PvPOffenseBoni, Offense) self.CheckBonus(bonus, self.PvPDefenseBoni, Defense) elif type == self.BonusDict[1]: self.CheckBonus(bonus, self.PvMOffenseBoni, Offense) self.CheckBonus(bonus, self.PvMDefenseBoni, Defense) elif type == self.BonusDict[2]: self.CheckBonus(bonus, self.LeftoversOffenseBoni, Offense) self.CheckBonus(bonus, self.LeftoversDefenseBoni, Defense) else: return def CheckBonus(self, bonus, bonuslist, offset): for boni in bonuslist: if bonus[0] == boni: try: Index = bonuslist.index(boni) BonusDescription = ui.TextLine() BonusDescription.SetParent(self.Board) BonusDescription.SetPosition(offset[Index][0], offset[Index][1]) BonusDescription.SetText(str(bonus[0])) BonusDescription.Show() BonusSlotBar = ui.SlotBar() BonusSlotBar.SetParent(self.Board) BonusSlotBar.SetSize(115, 15) BonusSlotBar.SetPosition(offset[Index][0], offset[Index][1] + 15) BonusSlotBar.Show() BonusAttrLine = ui.TextLine() BonusAttrLine.SetParent(self.Board) BonusAttrLine.SetPosition(offset[Index][0] + 5, offset[Index][1] + 15) try: Type = self.SpecialBoni[bonus[1]] Attribute = self.EquipAttribute(bonus) except: Attribute = player.GetStatus(int(bonus[2])) if self.TestSystem != 1: BonusAttrLine.SetText(str(Attribute)) try: if int(Attribute) >= int(self.MaxBoni[str(bonus[1])]): BonusAttrLine.SetFontColor(1.0, 0.63, 0) else: BonusAttrLine.SetFontColor(1, 1, 1) except: BonusAttrLine.SetFontColor(1, 1, 1) else: BonusAttrLine.SetText("Test system is active") BonusAttrLine.SetFontColor(0.1, 0.7, 1.0) BonusAttrLine.Show() self.BonusList.append([BonusDescription, BonusAttrLine, BonusSlotBar]) except: pass def EquipAttribute(self, bonus): value = 0 for slot in xrange(90, 101): for attr in xrange(0, 7): attr, val = player.GetItemAttribute(slot, attr) if int(attr) == bonus[1]: value += int(val) return int(value) def ChangeBonusDict(self, dict): self.dict = dict for bonus in self.BonusList: try: for array in bonus: array.Hide() except: pass self.SetBoni(dict) def OnUpdate(self): import item if int(app.GetTime()) > int(self.ProcessTimeStamp) + 6: self.SetBoni(self.dict) self.ProcessTimeStamp = app.GetTime() #BonusBoardDialog().Show()
inside uiinventory (just bonus page scripts):
Spoiler### Above class InventoryWindow(ui.ScriptWindow): is this : aratabonusuri = 0 ### Above self.mallButton = self.GetChild2("MallButton") is this: self.PaginaBonusuri = self.GetChild2("PaginaBonusuri") ### Above self.mallButton.SetEvent(ui.__mem_func__(self.ClickMallButton)) is this: if self.PaginaBonusuri: self.PaginaBonusuri.SetEvent(ui.__mem_func__(self.ClickPaginaBonusuri)) ### Above def ClickMallButton(self): is this: def ClickPaginaBonusuri(self): import event import game import uibonuspage import uiinventory global aratabonusuri if aratabonusuri == 0: aratabonusuri = 1 exec 'uibonuspage.BonusBoardDialog().Show()' else: exec 'uibonuspage.BonusBoardDialog().Hide()' aratabonusuri = 0
inventorywindow.py button:
Spoiler{ "name" : "PaginaBonusuri", "type" : "button", "x" : 10, "y" : 104 + 26 + 33, "tooltip_text" : "Bonusuri", "default_image" : "locale/es/ui/bp1.tga", "over_image" : "locale/es/ui/bp2.tga", "down_image" : "locale/es/ui/bp2.tga", },
So. How i can make this board to hide when i press again the button ?
-
Hello , i made a bar for buttons and i can't use buttons placed on bar , if i put buttons directly on inventory it works.
screen:
If i put buttons directly on inventory it works. I think is a problem with inventory range or something because if i move buttons to left them works.
There is full script:
import uiScriptLocale import item EQUIPMENT_START_INDEX = 180 window = { "name" : "InventoryWindow", ## 600 - (width + ¡Ë?A¡Ë¡þ¢®IAEA¡Ë¡þ¢®¢´I ¡§¡þIAI ¡ËOc¡Ë?i¢®¨úa 24 px) "x" : SCREEN_WIDTH - 176, "y" : SCREEN_HEIGHT - 37 - 571, "style" : ("movable", "float",), "width" : 176, "height" : 576, "children" : ( ## Inventory, Equipment Slots { "name" : "board", "type" : "board", "style" : ("attach", "float",), "x" : -37, "y" : 26, "width" : 37, "height" : 155, "children" : ( { "name" : "teleporter_index", "type" : "button", "x" : 6, "y" : 6, "tooltip_text" : "Teleportare", "default_image" : "locale/es/ui/teleport1.tga", "over_image" : "locale/es/ui/teleport2.tga", "down_image" : "locale/es/ui/teleport2.tga", }, { "name" : "antiexp_index", "type" : "button", "x" : 6, "y" : 39, "tooltip_text" : "Anti Experienta", "default_image" : "locale/es/ui/inelexp1.tga", "over_image" : "locale/es/ui/inelexp2.tga", "down_image" : "locale/es/ui/inelexp2.tga", }, { "name" : "depozit_index", "type" : "button", "x" : 6, "y" : 72, "tooltip_text" : "Depozit", "default_image" : "locale/es/ui/depozit1.tga", "over_image" : "locale/es/ui/depozit2.tga", "down_image" : "locale/es/ui/depozit2.tga", }, { "name" : "tombola_button", "type" : "button", "x" : 6, "y" : 105, "tooltip_text" : "Tombola", "default_image" : "locale/es/ui/buton_tombola1.tga", "over_image" : "locale/es/ui/buton_tombola2.tga", "down_image" : "locale/es/ui/buton_tombola2.tga", }, ), }, { "name" : "board", "type" : "board", "style" : ("attach",), "x" : 0, "y" : 0, "width" : 176, "height" : 576, "children" : ( ## Title { "name" : "TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 8, "y" : 7, "width" : 166, "color" : "yellow", "children" : ( { "name":"TitleName", "type":"text", "x":77, "y":3, "text":uiScriptLocale.INVENTORY_TITLE, "text_horizontal_align":"center" }, ), }, ## Equipment Slot { "name" : "Equipment_Base", "type" : "image", "x" : 7, "y" : 26, "image" : "d:/ymir work/ui/equipment_bg_without_ring.tga", "children" : ( { "name" : "EquipmentSlot", "type" : "slot", "x" : 3, "y" : 3, "width" : 150, "height" : 176, "slot" : ( {"index":EQUIPMENT_START_INDEX+0, "x":39, "y":37, "width":32, "height":64}, {"index":EQUIPMENT_START_INDEX+1, "x":39, "y":2, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+2, "x":39, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+3, "x":75, "y":67, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+4, "x":3, "y":3, "width":32, "height":96}, {"index":EQUIPMENT_START_INDEX+5, "x":114, "y":67, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+6, "x":114, "y":35, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+7, "x":2, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+8, "x":75, "y":145, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+9, "x":114, "y":2, "width":32, "height":32}, {"index":EQUIPMENT_START_INDEX+10, "x":75, "y":35, "width":32, "height":32}, {"index":item.EQUIPMENT_BELT, "x":39, "y":106, "width":32, "height":32}, ), }, ## Dragon Soul Button { "name" : "DSSButton", "type" : "button", "x" : 114, "y" : 107, "tooltip_text" : "Deschide Alchimie", "default_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_01.tga", "over_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_02.tga", "down_image" : "d:/ymir work/ui/dragonsoul/dss_inventory_button_03.tga", }, ## Offline Shop Button { "name" : "OfflineShopButton", "type" : "button", "x" : 77, "y" : 109, "tooltip_text" : uiScriptLocale.TASKBAR_OFFLINE_SHOP, "default_image" : "locale/es/offlineshop/boton1.tga", "over_image" : "locale/es/offlineshop/boton2.tga", "down_image" : "locale/es/offlineshop/boton1.tga", }, ## MallButton { "name" : "MallButton", "type" : "button", "x" : 118, "y" : 148, "tooltip_text" : uiScriptLocale.MALL_TITLE, "default_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_01.tga", "over_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_02.tga", "down_image" : "d:/ymir work/ui/game/TaskBar/Mall_Button_03.tga", }, { "name" : "BancaYang", "type" : "button", "x" : 3, "y" : 109, "tooltip_text" : "Banca Yang", "default_image" : "locale/es/ui/banca_buton1.tga", "over_image" : "locale/es/ui/banca_buton2.tga", "down_image" : "locale/es/ui/banca_buton2.tga", }, ## CostumeButton { "name" : "CostumeButton", "type" : "button", "x" : 78, "y" : 5, "tooltip_text" : uiScriptLocale.COSTUME_TITLE, "default_image" : "d:/ymir work/ui/game/taskbar/costume_Button_01.tga", "over_image" : "d:/ymir work/ui/game/taskbar/costume_Button_02.tga", "down_image" : "d:/ymir work/ui/game/taskbar/costume_Button_03.tga", }, { "name" : "Equipment_Tab_01", "type" : "radio_button", "x" : 86, "y" : 161, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "children" : ( { "name" : "Equipment_Tab_01_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "I", }, ), }, { "name" : "Equipment_Tab_02", "type" : "radio_button", "x" : 86 + 32, "y" : 161, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "children" : ( { "name" : "Equipment_Tab_02_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "II", }, ), }, ), }, { "name" : "Inventory_Tab_01", "type" : "radio_button", "x" : 7, "y" : 33 + 180, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_1, "children" : ( { "name" : "Inventory_Tab_01_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "I", }, ), }, { "name" : "Inventory_Tab_02", "type" : "radio_button", "x" : 13 + 27, "y" : 33 + 180, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "tooltip_text" : uiScriptLocale.INVENTORY_PAGE_BUTTON_TOOLTIP_2, "children" : ( { "name" : "Inventory_Tab_02_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "II", }, ), }, { "name" : "Inventory_Tab_03", "type" : "radio_button", "x" : 13 + 57, "y" : 33 + 180, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "tooltip_text" : "3.Inventar", "children" : ( { "name" : "Inventory_Tab_03_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "III", }, ), }, { "name" : "Inventory_Tab_04", "type" : "radio_button", "x" : 13 + 87, "y" : 33 + 180, "default_image" : "d:/ymir work/ui/game/windows/tab_button_small_01.sub", "over_image" : "d:/ymir work/ui/game/windows/tab_button_small_02.sub", "down_image" : "d:/ymir work/ui/game/windows/tab_button_small_03.sub", "tooltip_text" : "4.Inventar", "children" : ( { "name" : "Inventory_Tab_04_Print", "type" : "text", "x" : 0, "y" : 0, "all_align" : "center", "text" : "IV", }, ), }, ## Item Slot { "name" : "ItemSlot", "type" : "grid_table", "x" : 8, "y" : 246, "start_index" : 0, "x_count" : 5, "y_count" : 9, "x_step" : 32, "y_step" : 32, "image" : "d:/ymir work/ui/public/Slot_Base.sub" }, ## Print # { # "name" : "Switchbot", # "type" : "button", # "x" : 169, # "y" : 37, # "tooltip_text" : "Schimba bonus", # "default_image" : "locale/es/ui/switcher1.tga", # "over_image" : "locale/es/ui/switcher2.tga", # "down_image" : "locale/es/ui/switcher2.tga", # }, # { # "name" : "PaginaBonusuri", # "type" : "button", # "x" : 169, # "y" : 74, # "tooltip_text" : "Bonusuri", # "default_image" : "locale/es/ui/bp1.tga", # "over_image" : "locale/es/ui/bp2.tga", # "down_image" : "locale/es/ui/bp2.tga", # }, { "name":"Money_Slot", "type":"button", "x":37, "y":28+14, "horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_03.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_03.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_03.sub", "children" : ( { "name":"Money_Icon", "type":"image", "x":-14, "y":2, "image":"d:/ymir work/ui/game/windows/money_icon.sub", }, { "name" : "Money", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789", }, ), }, { "name":"Pct_Slot", "type":"button", "x":-48, "y":28+14, "horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_01.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_01.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_01.sub", "children" : ( { "name":"Pct_Icon", "type":"image", "x":-14, "y":2, "image" : "locale/es/ui/puncte.sub", }, { "name" : "Pct", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789 PCT", }, ), }, { "name":"Banca_Slot", "type":"button", "x":4, "y":25, "horizontal_align":"center", "vertical_align":"bottom", "default_image" : "locale/es/ui/banca.sub", "over_image" : "locale/es/ui/banca.sub", "down_image" : "locale/es/ui/banca.sub", "children" : ( { "name":"Banca_Icon", "type":"image", "x":-14, "y":2, "image":"locale/es/ui/banca_sign.sub", }, { "name" : "Banca", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789 Yang in Banca", }, ), }, ), }, ), }
-
Hello!
First of all this example:
CH1: 1 3 4 5 21 23 24 25 26 41 43 44 45 61 62 63 64 65 66 67 68 69 70 71 72 73 81 103 104 105 107 108 109 110 111
CH99: 113 114 118 119 120 121 122 123 124 125 126 127 128 181 182 183 193 206 207 212 213 215 216 217 218 240 250Good , think about if I want to transfer me with a portal from map 1 to map 21.
Every time you will transfer from a map to other map with a portal you will see a loading screen.
But , these maps are on same channel and same core so , how i can make the transfer like this function from dungeons d.new_jump(mapindex, xcoord, ycoord)?
If we go in game source we can copy this function d.new_jump and remake it as pc.new_jump without this condition if pc.in_dungeon , this will jump peoples directly from a map to other map without loading screen if maps are on same channel and same core.
So this is real question , how i can change function warp from portals to become pc.new_jump ?
In short : I want to get rid of loading bar when peoples teleport , i want this bar to appear only when you move from ch1 map to ch99 map. -
Hello guys , i want to know how to make a new character like wolfman or berserker.
I want to know what programs to use and how to do it.
I know how to make the model but i don't know how to create new skill and character animations.
(I can copy lycan files and make new model of this lycan but i don't know how to make new animations for attack , run and standing also i don't know how to make new skills)
So there is any tutorial to create what is in ( ) ?
-
sorry VegaS , forgot to mention cuz i was in a hurry... i'll edit .
I didn't said this is my own tutorial or something , i just wanted to help others.
11 hours ago, VegaS said:You copied my message from another forum..ohh gg xD
There is much better:
import constInfo if (constInfo.TableSkillButton(1)) == "Enable": if player.GetStatus(player.LEVEL) < (constInfo.TableSkillButton(2)) and self.__IsSkillStat(): skillPlusButton.Show() else: skillPlusButton.Hide() elif (constInfo.TableSkillButton(1)) == "Disable": if self.__IsSkillStat(): skillPlusButton.Show() else: skillPlusButton.Hide()
def TableSkillButton(o): i = { 1 : "Enable", # Enable for active function , Disable for dezactivate. 2 : 100} # The maximum level to which button will be displayed if i.has_key(o): return i[o]
Yea VegaS is true , is your post from other forum . I was in hurry when i wrote. I'm sorry again , now is edited.
- 1
-
Do this:
root/constInfo.py Put this:
SpoilerDISABLE_SKILL_BUTTON = 1
root/uiGameButton.py Search this:
Spoilerif self.__IsSkillStat(): skillPlusButton.Show() else: skillPlusButton.Hide()
Replace with:
Spoilerimport constInfo if constInfo.DISABLE_SKILL_BUTTON == 1: skillPlusButton.Hide() else: if self.__IsSkillStat(): skillPlusButton.Show() else: skillPlusButton.Hide()
[This tutorial was made by VegaS on other forum]
-
-
Pictures say it all:
This bug appear at first log in after you created your character and first quest you run from game text don't disappear after you close it. -
Pictures say it all:
This bug appear at first log in after you created your character and first quest you run from game text don't disappear after you close it. -
Pictures say it all:
This bug appear at first log in after you created your character and first quest you run from game text don't disappear after you close it. -
Hello! I impelemented ingame raffle with inventory button but I got a bug and i can't solve it.
When you login , first try of raffle works perfectly but when you try raffle second time , when you press button from inventory ,it give you the last item you won from raffle.
I think i know where is the bug but i can't solve it , cuz i dont know, button from inventory uses this function: when button begin , also button Start from raffle uses function: when info or button begin and this creating a conflict and raffle think that button from inventory is part of it.
video says it all:
https://www.youtube.com/watch?v=zw9v7JhSJU8&feature=youtu.beQuest:
Spoilerquest tombola begin
state start begin
function tablica(vnum, pozycja, pozycja2)
local itemy = {
{
{71001, 1},
{71084, 25},
{71085, 25},
{25040, 3},
{27992, 2},
{27993, 2},
{27994, 2},
{27987, 5},
{72002, 1},
{71027, 5},
{71028, 5},
{71029, 5},
{71030, 5},
{71036, 1},
{50008, 15},
{70021, 3},
{71001, 1},
},
{
{71001, 1},
{71084, 25},
{71085, 25},
{25040, 3},
{27992, 2},
{27993, 2},
{27994, 2},
{27987, 5},
{72002, 1},
{71027, 5},
{71028, 5},
{71029, 5},
{71030, 5},
{71036, 1},
{50008, 15},
{70021, 3},
{71001, 1},
}
}
return itemy[vnum][pozycja][pozycja2]
end
when login begin
cmdchat("tombola "..q.getcurrentquestindex())
end
when letter begin
cmdchat("tombola_button "..q.getcurrentquestindex())
end
when info or button begin
local losowo = number(1,2)
local str = " "
for i = 1,16 do
if i == 16 then
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2)
else
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2).."|"
end
end
cmdchat("OnPrepare"..str)
cmdchat("openTombola")
setskin(NOWINDOW)
end
when info or button begin
local Puncte = mysql_query("SELECT puncte from player.player WHERE id="..pc.get_player_id().." LIMIT 1;")[1][1]
local losowo = number(1,2)
if Puncte >= 10 then
local str = " "
for i = 1,16 do
if i == 16 then
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2)
else
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2).."|"
end
end
cmdchat("OnPrepare"..str)
if pc.get_empty_inventory_count() < 3 then
syschat("Nu puteti juca, pentru cã nu aveti suficient spatiu în inventar.")
return
end
cmdchat("get_input_start")
local czynnosc = input(cmdchat("get_input_value"))
cmdchat("get_input_end")
if czynnosc == "tombola|begin" then
pc.setqf("slot", number(1, 16))
cmdchat("OnRun "..number(2,3)*16+pc.getqf("slot").."|5")
elseif czynnosc == "tombola|end" then
local Puncte = mysql_query("SELECT puncte from player.player WHERE id="..pc.get_player_id().." LIMIT 1;")[1][1]
mysql_query("UPDATE player.player SET puncte = puncte-10 WHERE id="..pc.get_player_id().." LIMIT 1;")
cmdchat("Pct "..Puncte)
cmdchat("Pct "..Puncte)
syschat("Felicitãri! Ai primit"..tombola.tablica(losowo, pc.getqf("slot")+1, 2).."x "..item_name(tombola.tablica(losowo, pc.getqf("slot")+1, 1)).." ca o recompensã în Tombola!")
pc.give_item2(tombola.tablica(losowo, pc.getqf("slot")+1, 1), tombola.tablica(losowo, pc.getqf("slot")+1, 2))
cmdchat("Pct "..Puncte)
end
else
say("Ai nevoie de 10 Puncte pentru a utiliza roata norocului.")cmdchat("Pct "..Puncte)
end
end
end
enduitombola:
Spoilerimport app
import constInfo
import ui
import uiToolTip
import item
import locale
import player
import grp
import time
import eventclass TombolaWindow(ui.BoardWithTitleBar):
def __init__(self):
ui.BoardWithTitleBar.__init__(self)
self.__BuildWindow()
def __del__(self):
ui.BoardWithTitleBar.__del__(self)
def __BuildWindow(self):
self.xOpen = 0
self.yOpen = 0
self.speedDown = 5
self.timeDiff = 0.1
self.tooltipItem = None
self.animate = FALSE
self.blink = FALSE
self.blinkTimes = 6
self.blinkLast = 0
self.position = 1
self.toPosition = 16
self.lastClock = 0
self.SetSize(341, 364)
self.AddFlag("float")
self.AddFlag("movable")
self.SetTitleName("Ruleta Destinului")
image = ui.ImageBox()
image.SetParent(self)
image.LoadImage("locale/es/ui/tombola/background.tga")
image.SetPosition(6, 29)
image.Show()
self.background = image
select = ui.ImageBox()
select.SetParent(self.background)
select.SetPosition(0, 0)
select.LoadImage("locale/es/ui/tombola/1.tga")
select.Hide()
self.select = select
button = ui.Button()
button.SetParent(self.background)
button.SetPosition(125, 124)
button.SetUpVisual("locale/es/ui/tombola/button.tga")
button.SetOverVisual("locale/es/ui/tombola/button_hover.tga")
button.SetDownVisual("locale/es/ui/tombola/button_down.tga")
button.SetEvent(ui.__mem_func__(self.OnButtonClick))
button.Show()
self.run = button
self.slots = [
self.__CreateSlot(1, 161 - 5, 53 - 4),
self.__CreateSlot(2, 207 - 5, 63 - 4),
self.__CreateSlot(3, 248 - 5, 93 - 4),
self.__CreateSlot(4, 277 - 5, 135 - 4),
self.__CreateSlot(5, 290 - 5, 182 - 4),
self.__CreateSlot(6, 277 - 5, 228 - 4),
self.__CreateSlot(7, 248 - 5, 271 - 4),
self.__CreateSlot(8, 207 - 5, 298 - 4),
self.__CreateSlot(9, 160 - 5, 307 - 4),
self.__CreateSlot(10, 114 - 5, 296 - 4),
self.__CreateSlot(11, 72 - 5, 269 - 4),
self.__CreateSlot(12, 44 - 5, 229 - 4),
self.__CreateSlot(13, 30 - 5, 183 - 4),
self.__CreateSlot(14, 41 - 5, 133 - 4),
self.__CreateSlot(15, 70 - 5, 92 - 4),
self.__CreateSlot(16, 112 - 5, 63 - 4)
]
self.items = {}
def __CreateSlot(self, number, x, y):
grid = ui.GridSlotWindow()
grid.SetParent(self)
grid.SetPosition(x, y)
grid.ArrangeSlot(number, 1, 1, 32, 32, 0, 0)
grid.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
grid.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
grid.RefreshSlot()
grid.Show()
return grid
def OverInItem(self, slotIndex):
if slotIndex < 1 or slotIndex > 16:
return
self.tooltipItem = uiToolTip.ItemToolTip()
self.tooltipItem.AddItemData(self.items[slotIndex - 1], 0, 0)
self.tooltipItem.Show()def OverOutItem(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
def OnButtonClick(self):
self.run.Disable()
self.run.Down()
constInfo.VID = "tombola|begin"
event.QuestButtonClick(constInfo.TOMBOLA)
def OnPrepare(self, items):
items = items.split("|")
j = 0
for i in range(0, 32, 2):
self.slots[j].SetItemSlot(j + 1, int(items), int(items[i + 1]))
self.items[j] = int(items)
j += 1
def OnRun(self, data):
data = data.split("|")
self.toPosition = int(data[0])
self.speedDown = int(data[1])
self.blinkTimes = 6
self.blinkLast = 0
self.position = 1
self.animate = TRUE
self.blink = FALSE
self.timeDiff = 0.1
self.lastClock = app.GetTime()
def OnUpdate(self):
if self.animate == TRUE:
if (app.GetTime() - self.lastClock) >= self.timeDiff:
self.lastClock = app.GetTime()
self.toPosition -= 1
if self.toPosition <= self.speedDown:
self.timeDiff += 0.1
self.position += 1
if self.position == 17:
self.position = 1
if not self.select.IsShow():
self.select.Show()
self.select.LoadImage("locale/es/ui/tombola/" + str(self.position) + ".tga")
if self.toPosition == 0:
self.animate = FALSE
self.blink = TRUE
self.run.Enable()
self.run.SetUp()
constInfo.VID = "tombola|end"
event.QuestButtonClick(constInfo.TOMBOLA)
if self.blink == TRUE and (app.GetTime() - self.blinkLast) >= 0.3:
if self.blinkTimes > 0:
if self.blinkTimes % 2:
self.select.Hide()
else:
self.select.Show()
self.blinkTimes -= 1
else:
self.blink = FALSE
self.blinkTimes = 6
self.blinkLast = 0
self.select.Hide()
self.select.LoadImage("locale/es/ui/tombola/1.tga")
self.blinkLast = app.GetTime()
(x, y, z) = player.GetMainCharacterPosition()
def Open(self):
if not self.IsShow():
self.Show()
(self.xOpen, self.yOpen, z) = player.GetMainCharacterPosition()
def Close(self):
if self.IsShow():
self.Hide()
def OnPressEscapeKey(self):
self.Close()
return TRUEGame:http://pastebin.com/e9Ytb8RG
uiinventory:http://pastebin.com/fDPn84Xa
inventorywindow: http://pastebin.com/1M0v9gcG -
Hello! I impelemented ingame raffle with inventory button but I got a bug and i can't solve it.
When you login , first try of raffle works perfectly but when you try raffle second time , when you press button from inventory ,it give you the last item you won from raffle.
I think i know where is the bug but i can't solve it , cuz i dont know, button from inventory uses this function: when button begin , also button Start from raffle uses function: when info or button begin and this creating a conflict and raffle think that button from inventory is part of it.
video says it all:
[bbvideo=560,315]https://www.youtube.com/watch?v=zw9v7JhSJU8&feature=youtu.be[/bbvideo]Quest:
[python]quest tombola begin
state start begin
function tablica(vnum, pozycja, pozycja2)
local itemy = {
{
{71001, 1},
{71084, 25},
{71085, 25},
{25040, 3},
{27992, 2},
{27993, 2},
{27994, 2},
{27987, 5},
{72002, 1},
{71027, 5},
{71028, 5},
{71029, 5},
{71030, 5},
{71036, 1},
{50008, 15},
{70021, 3},
{71001, 1},
},
{
{71001, 1},
{71084, 25},
{71085, 25},
{25040, 3},
{27992, 2},
{27993, 2},
{27994, 2},
{27987, 5},
{72002, 1},
{71027, 5},
{71028, 5},
{71029, 5},
{71030, 5},
{71036, 1},
{50008, 15},
{70021, 3},
{71001, 1},
}
}
return itemy[vnum][pozycja][pozycja2]
end
when login begin
cmdchat("tombola "..q.getcurrentquestindex())
end
when letter begin
cmdchat("tombola_button "..q.getcurrentquestindex())
end
when info or button begin
local losowo = number(1,2)
local str = " "
for i = 1,16 do
if i == 16 then
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2)
else
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2).."|"
end
end
cmdchat("OnPrepare"..str)
cmdchat("openTombola")
setskin(NOWINDOW)
end
when info or button begin
local Puncte = mysql_query("SELECT puncte from player.player WHERE id="..pc.get_player_id().." LIMIT 1;")[1][1]
local losowo = number(1,2)
if Puncte >= 10 then
local str = " "
for i = 1,16 do
if i == 16 then
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2)
else
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2).."|"
end
end
cmdchat("OnPrepare"..str)
if pc.get_empty_inventory_count() < 3 then
syschat("Nu puteti juca, pentru cã nu aveti suficient spatiu în inventar.")
return
end
cmdchat("get_input_start")
local czynnosc = input(cmdchat("get_input_value"))
cmdchat("get_input_end")
if czynnosc == "tombola|begin" then
pc.setqf("slot", number(1, 16))
cmdchat("OnRun "..number(2,3)*16+pc.getqf("slot").."|5")
elseif czynnosc == "tombola|end" then
local Puncte = mysql_query("SELECT puncte from player.player WHERE id="..pc.get_player_id().." LIMIT 1;")[1][1]
mysql_query("UPDATE player.player SET puncte = puncte-10 WHERE id="..pc.get_player_id().." LIMIT 1;")
cmdchat("Pct "..Puncte)
cmdchat("Pct "..Puncte)
syschat("Felicitãri! Ai primit"..tombola.tablica(losowo, pc.getqf("slot")+1, 2).."x "..item_name(tombola.tablica(losowo, pc.getqf("slot")+1, 1)).." ca o recompensã în Tombola!")
pc.give_item2(tombola.tablica(losowo, pc.getqf("slot")+1, 1), tombola.tablica(losowo, pc.getqf("slot")+1, 2))
cmdchat("Pct "..Puncte)
end
else
say("Ai nevoie de 10 Puncte pentru a utiliza roata norocului.")cmdchat("Pct "..Puncte)
end
end
end
end[/python]uitombola:
[python]import app
import constInfo
import ui
import uiToolTip
import item
import locale
import player
import grp
import time
import eventclass TombolaWindow(ui.BoardWithTitleBar):
def __init__(self):
ui.BoardWithTitleBar.__init__(self)
self.__BuildWindow()
def __del__(self):
ui.BoardWithTitleBar.__del__(self)
def __BuildWindow(self):
self.xOpen = 0
self.yOpen = 0
self.speedDown = 5
self.timeDiff = 0.1
self.tooltipItem = None
self.animate = FALSE
self.blink = FALSE
self.blinkTimes = 6
self.blinkLast = 0
self.position = 1
self.toPosition = 16
self.lastClock = 0
self.SetSize(341, 364)
self.AddFlag("float")
self.AddFlag("movable")
self.SetTitleName("Ruleta Destinului")
image = ui.ImageBox()
image.SetParent(self)
image.LoadImage("locale/es/ui/tombola/background.tga")
image.SetPosition(6, 29)
image.Show()
self.background = image
select = ui.ImageBox()
select.SetParent(self.background)
select.SetPosition(0, 0)
select.LoadImage("locale/es/ui/tombola/1.tga")
select.Hide()
self.select = select
button = ui.Button()
button.SetParent(self.background)
button.SetPosition(125, 124)
button.SetUpVisual("locale/es/ui/tombola/button.tga")
button.SetOverVisual("locale/es/ui/tombola/button_hover.tga")
button.SetDownVisual("locale/es/ui/tombola/button_down.tga")
button.SetEvent(ui.__mem_func__(self.OnButtonClick))
button.Show()
self.run = button
self.slots = [
self.__CreateSlot(1, 161 - 5, 53 - 4),
self.__CreateSlot(2, 207 - 5, 63 - 4),
self.__CreateSlot(3, 248 - 5, 93 - 4),
self.__CreateSlot(4, 277 - 5, 135 - 4),
self.__CreateSlot(5, 290 - 5, 182 - 4),
self.__CreateSlot(6, 277 - 5, 228 - 4),
self.__CreateSlot(7, 248 - 5, 271 - 4),
self.__CreateSlot(8, 207 - 5, 298 - 4),
self.__CreateSlot(9, 160 - 5, 307 - 4),
self.__CreateSlot(10, 114 - 5, 296 - 4),
self.__CreateSlot(11, 72 - 5, 269 - 4),
self.__CreateSlot(12, 44 - 5, 229 - 4),
self.__CreateSlot(13, 30 - 5, 183 - 4),
self.__CreateSlot(14, 41 - 5, 133 - 4),
self.__CreateSlot(15, 70 - 5, 92 - 4),
self.__CreateSlot(16, 112 - 5, 63 - 4)
]
self.items = {}
def __CreateSlot(self, number, x, y):
grid = ui.GridSlotWindow()
grid.SetParent(self)
grid.SetPosition(x, y)
grid.ArrangeSlot(number, 1, 1, 32, 32, 0, 0)
grid.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
grid.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
grid.RefreshSlot()
grid.Show()
return grid
def OverInItem(self, slotIndex):
if slotIndex < 1 or slotIndex > 16:
return
self.tooltipItem = uiToolTip.ItemToolTip()
self.tooltipItem.AddItemData(self.items[slotIndex - 1], 0, 0)
self.tooltipItem.Show()def OverOutItem(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
def OnButtonClick(self):
self.run.Disable()
self.run.Down()
constInfo.VID = "tombola|begin"
event.QuestButtonClick(constInfo.TOMBOLA)
def OnPrepare(self, items):
items = items.split("|")
j = 0
for i in range(0, 32, 2):
self.slots[j].SetItemSlot(j + 1, int(items), int(items[i + 1]))
self.items[j] = int(items)
j += 1
def OnRun(self, data):
data = data.split("|")
self.toPosition = int(data[0])
self.speedDown = int(data[1])
self.blinkTimes = 6
self.blinkLast = 0
self.position = 1
self.animate = TRUE
self.blink = FALSE
self.timeDiff = 0.1
self.lastClock = app.GetTime()
def OnUpdate(self):
if self.animate == TRUE:
if (app.GetTime() - self.lastClock) >= self.timeDiff:
self.lastClock = app.GetTime()
self.toPosition -= 1
if self.toPosition <= self.speedDown:
self.timeDiff += 0.1
self.position += 1
if self.position == 17:
self.position = 1
if not self.select.IsShow():
self.select.Show()
self.select.LoadImage("locale/es/ui/tombola/" + str(self.position) + ".tga")
if self.toPosition == 0:
self.animate = FALSE
self.blink = TRUE
self.run.Enable()
self.run.SetUp()
constInfo.VID = "tombola|end"
event.QuestButtonClick(constInfo.TOMBOLA)
if self.blink == TRUE and (app.GetTime() - self.blinkLast) >= 0.3:
if self.blinkTimes > 0:
if self.blinkTimes % 2:
self.select.Hide()
else:
self.select.Show()
self.blinkTimes -= 1
else:
self.blink = FALSE
self.blinkTimes = 6
self.blinkLast = 0
self.select.Hide()
self.select.LoadImage("locale/es/ui/tombola/1.tga")
self.blinkLast = app.GetTime()
(x, y, z) = player.GetMainCharacterPosition()
def Open(self):
if not self.IsShow():
self.Show()
(self.xOpen, self.yOpen, z) = player.GetMainCharacterPosition()
def Close(self):
if self.IsShow():
self.Hide()
def OnPressEscapeKey(self):
self.Close()
return TRUE[/python]Game:[python]http://pastebin.com/e9Ytb8RG[/python]
uiinventory:[python]http://pastebin.com/fDPn84Xa[/python]
inventorywindow: [python]http://pastebin.com/1M0v9gcG[/python] -
Hello! I impelemented ingame raffle with inventory button but I got a bug and i can't solve it.
When you login , first try of raffle works perfectly but when you try raffle second time , when you press button from inventory ,it give you the last item you won from raffle.
I think i know where is the bug but i can't solve it , cuz i dont know, button from inventory uses this function: when button begin , also button Start from raffle uses function: when info or button begin and this creating a conflict and raffle think that button from inventory is part of it.
video says it all:
[bbvideo=560,315]https://www.youtube.com/watch?v=zw9v7JhSJU8&feature=youtu.be[/bbvideo]Quest:
[python]quest tombola begin
state start begin
function tablica(vnum, pozycja, pozycja2)
local itemy = {
{
{71001, 1},
{71084, 25},
{71085, 25},
{25040, 3},
{27992, 2},
{27993, 2},
{27994, 2},
{27987, 5},
{72002, 1},
{71027, 5},
{71028, 5},
{71029, 5},
{71030, 5},
{71036, 1},
{50008, 15},
{70021, 3},
{71001, 1},
},
{
{71001, 1},
{71084, 25},
{71085, 25},
{25040, 3},
{27992, 2},
{27993, 2},
{27994, 2},
{27987, 5},
{72002, 1},
{71027, 5},
{71028, 5},
{71029, 5},
{71030, 5},
{71036, 1},
{50008, 15},
{70021, 3},
{71001, 1},
}
}
return itemy[vnum][pozycja][pozycja2]
end
when login begin
cmdchat("tombola "..q.getcurrentquestindex())
end
when letter begin
cmdchat("tombola_button "..q.getcurrentquestindex())
end
when info or button begin
local losowo = number(1,2)
local str = " "
for i = 1,16 do
if i == 16 then
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2)
else
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2).."|"
end
end
cmdchat("OnPrepare"..str)
cmdchat("openTombola")
setskin(NOWINDOW)
end
when info or button begin
local Puncte = mysql_query("SELECT puncte from player.player WHERE id="..pc.get_player_id().." LIMIT 1;")[1][1]
local losowo = number(1,2)
if Puncte >= 10 then
local str = " "
for i = 1,16 do
if i == 16 then
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2)
else
str = str..tombola.tablica(losowo, i, 1).."|"..tombola.tablica(losowo, i, 2).."|"
end
end
cmdchat("OnPrepare"..str)
if pc.get_empty_inventory_count() < 3 then
syschat("Nu puteti juca, pentru cã nu aveti suficient spatiu în inventar.")
return
end
cmdchat("get_input_start")
local czynnosc = input(cmdchat("get_input_value"))
cmdchat("get_input_end")
if czynnosc == "tombola|begin" then
pc.setqf("slot", number(1, 16))
cmdchat("OnRun "..number(2,3)*16+pc.getqf("slot").."|5")
elseif czynnosc == "tombola|end" then
local Puncte = mysql_query("SELECT puncte from player.player WHERE id="..pc.get_player_id().." LIMIT 1;")[1][1]
mysql_query("UPDATE player.player SET puncte = puncte-10 WHERE id="..pc.get_player_id().." LIMIT 1;")
cmdchat("Pct "..Puncte)
cmdchat("Pct "..Puncte)
syschat("Felicitãri! Ai primit"..tombola.tablica(losowo, pc.getqf("slot")+1, 2).."x "..item_name(tombola.tablica(losowo, pc.getqf("slot")+1, 1)).." ca o recompensã în Tombola!")
pc.give_item2(tombola.tablica(losowo, pc.getqf("slot")+1, 1), tombola.tablica(losowo, pc.getqf("slot")+1, 2))
cmdchat("Pct "..Puncte)
end
else
say("Ai nevoie de 10 Puncte pentru a utiliza roata norocului.")cmdchat("Pct "..Puncte)
end
end
end
end[/python]uitombola:
[python]import app
import constInfo
import ui
import uiToolTip
import item
import locale
import player
import grp
import time
import eventclass TombolaWindow(ui.BoardWithTitleBar):
def __init__(self):
ui.BoardWithTitleBar.__init__(self)
self.__BuildWindow()
def __del__(self):
ui.BoardWithTitleBar.__del__(self)
def __BuildWindow(self):
self.xOpen = 0
self.yOpen = 0
self.speedDown = 5
self.timeDiff = 0.1
self.tooltipItem = None
self.animate = FALSE
self.blink = FALSE
self.blinkTimes = 6
self.blinkLast = 0
self.position = 1
self.toPosition = 16
self.lastClock = 0
self.SetSize(341, 364)
self.AddFlag("float")
self.AddFlag("movable")
self.SetTitleName("Ruleta Destinului")
image = ui.ImageBox()
image.SetParent(self)
image.LoadImage("locale/es/ui/tombola/background.tga")
image.SetPosition(6, 29)
image.Show()
self.background = image
select = ui.ImageBox()
select.SetParent(self.background)
select.SetPosition(0, 0)
select.LoadImage("locale/es/ui/tombola/1.tga")
select.Hide()
self.select = select
button = ui.Button()
button.SetParent(self.background)
button.SetPosition(125, 124)
button.SetUpVisual("locale/es/ui/tombola/button.tga")
button.SetOverVisual("locale/es/ui/tombola/button_hover.tga")
button.SetDownVisual("locale/es/ui/tombola/button_down.tga")
button.SetEvent(ui.__mem_func__(self.OnButtonClick))
button.Show()
self.run = button
self.slots = [
self.__CreateSlot(1, 161 - 5, 53 - 4),
self.__CreateSlot(2, 207 - 5, 63 - 4),
self.__CreateSlot(3, 248 - 5, 93 - 4),
self.__CreateSlot(4, 277 - 5, 135 - 4),
self.__CreateSlot(5, 290 - 5, 182 - 4),
self.__CreateSlot(6, 277 - 5, 228 - 4),
self.__CreateSlot(7, 248 - 5, 271 - 4),
self.__CreateSlot(8, 207 - 5, 298 - 4),
self.__CreateSlot(9, 160 - 5, 307 - 4),
self.__CreateSlot(10, 114 - 5, 296 - 4),
self.__CreateSlot(11, 72 - 5, 269 - 4),
self.__CreateSlot(12, 44 - 5, 229 - 4),
self.__CreateSlot(13, 30 - 5, 183 - 4),
self.__CreateSlot(14, 41 - 5, 133 - 4),
self.__CreateSlot(15, 70 - 5, 92 - 4),
self.__CreateSlot(16, 112 - 5, 63 - 4)
]
self.items = {}
def __CreateSlot(self, number, x, y):
grid = ui.GridSlotWindow()
grid.SetParent(self)
grid.SetPosition(x, y)
grid.ArrangeSlot(number, 1, 1, 32, 32, 0, 0)
grid.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
grid.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
grid.RefreshSlot()
grid.Show()
return grid
def OverInItem(self, slotIndex):
if slotIndex < 1 or slotIndex > 16:
return
self.tooltipItem = uiToolTip.ItemToolTip()
self.tooltipItem.AddItemData(self.items[slotIndex - 1], 0, 0)
self.tooltipItem.Show()def OverOutItem(self):
if self.tooltipItem:
self.tooltipItem.HideToolTip()
def OnButtonClick(self):
self.run.Disable()
self.run.Down()
constInfo.VID = "tombola|begin"
event.QuestButtonClick(constInfo.TOMBOLA)
def OnPrepare(self, items):
items = items.split("|")
j = 0
for i in range(0, 32, 2):
self.slots[j].SetItemSlot(j + 1, int(items), int(items[i + 1]))
self.items[j] = int(items)
j += 1
def OnRun(self, data):
data = data.split("|")
self.toPosition = int(data[0])
self.speedDown = int(data[1])
self.blinkTimes = 6
self.blinkLast = 0
self.position = 1
self.animate = TRUE
self.blink = FALSE
self.timeDiff = 0.1
self.lastClock = app.GetTime()
def OnUpdate(self):
if self.animate == TRUE:
if (app.GetTime() - self.lastClock) >= self.timeDiff:
self.lastClock = app.GetTime()
self.toPosition -= 1
if self.toPosition <= self.speedDown:
self.timeDiff += 0.1
self.position += 1
if self.position == 17:
self.position = 1
if not self.select.IsShow():
self.select.Show()
self.select.LoadImage("locale/es/ui/tombola/" + str(self.position) + ".tga")
if self.toPosition == 0:
self.animate = FALSE
self.blink = TRUE
self.run.Enable()
self.run.SetUp()
constInfo.VID = "tombola|end"
event.QuestButtonClick(constInfo.TOMBOLA)
if self.blink == TRUE and (app.GetTime() - self.blinkLast) >= 0.3:
if self.blinkTimes > 0:
if self.blinkTimes % 2:
self.select.Hide()
else:
self.select.Show()
self.blinkTimes -= 1
else:
self.blink = FALSE
self.blinkTimes = 6
self.blinkLast = 0
self.select.Hide()
self.select.LoadImage("locale/es/ui/tombola/1.tga")
self.blinkLast = app.GetTime()
(x, y, z) = player.GetMainCharacterPosition()
def Open(self):
if not self.IsShow():
self.Show()
(self.xOpen, self.yOpen, z) = player.GetMainCharacterPosition()
def Close(self):
if self.IsShow():
self.Hide()
def OnPressEscapeKey(self):
self.Close()
return TRUE[/python]Game:[python]http://pastebin.com/e9Ytb8RG[/python]
uiinventory:[python]http://pastebin.com/fDPn84Xa[/python]
inventorywindow: [python]http://pastebin.com/1M0v9gcG[/python]
Metin2 in Lan
in Community Support - Questions & Answers
Posted
Hello, i really want to make metin2 to work in lan how it was before i have a 40k source.
Look let's say my router gateway is 192.168.1.1 and server ip via dhcp is 192.168.1.150 and my external ip is something like 69.69.69.69
Look what i want to do, i want the server to work inside lan 24/7 even if i'm getting flooded it still have to stay up inside lan.
The thing is ,
If i'm using as server ip in config : 192.168.1.150 it will work but only on lan , outside people that connect with 69.69.69.69 will get disconnected at select character.
If i'm using 69.69.69.69 as server ip in config, outside people will not get anymore disconnect at select character but , there is a but! , if server is getting flooded and outside bandwidth fully ocuppied the server will shutdown game cores. And the reason for that is because server isn't using the lan ip to connect to himself , it is using 69.69.69.69.
I don't know how to explain it better.