alberto2010
Member-
Posts
29 -
Joined
-
Last visited
-
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Everything posted by alberto2010
-
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.
-
Automatic Dragon Soul Refine
alberto2010 replied to alberto2010's topic in Community Support - Questions & Answers
thanks man- 3 replies
-
- 145
-
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.
-
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
-
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
-
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 inside uiinventory (just bonus page scripts): inventorywindow.py button: 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 250 Good , 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.
-
[HowTo]create a new character?
alberto2010 posted a topic in Community Support - Questions & Answers
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. Yea VegaS is true , is your post from other forum . I was in hurry when i wrote. I'm sorry again , now is edited.
-
Do this: root/constInfo.py Put this: root/uiGameButton.py Search this: Replace with: [This tutorial was made by VegaS on other forum]
-
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: [Hidden Content] Quest: uitombola: Game:[Hidden Content] uiinventory:[Hidden Content] inventorywindow: [Hidden Content]
-
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][Hidden Content]] 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 event class 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][Hidden Content]] uiinventory:[python][Hidden Content]] inventorywindow: [python][Hidden Content]]
-
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][Hidden Content]] 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 event class 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][Hidden Content]] uiinventory:[python][Hidden Content]] inventorywindow: [python][Hidden Content]]