Peonso 666

Members
  • Content count

    121
  • Joined

  • Last visited

  1. It's not really new content, but worked hard in monster behavior and AI in last weeks and some of it is already ready. Monsters taking distance and fleeing behavior should match real Tibia now. 15/10 - As Guilcera has less bugs now, bug invasion will happen less often. - Monsters will dancestep more often. - Damage formulas of all damage spells are now based on 7.7 Tibia leaked server formulas, with the exception of Berserk, Soulfire, Envenon and Poison Storm. - Ranged monsters only dancestep at ideal 4 sqm range. - Ranged monsters slowdown at melee range to melee attack. - Fleeing monsters don't melee attack anymore. - Monsters now pick targets using Manhattan distance to determine nearness. - New path finding algorithm for ranged monsters trying to distance themselves from players, that matches the behavior from 7.7 Tibia leaked server. - New path finding algorithm for fleeing monsters trying to distance themselves from players, that matches the behavior from 7.7 Tibia leaked server.
  2. Change Log 22/09 As usual, some changes already applied, and some of them will be applied at server save. If your character is already over the maximum number of kills allowed, any next unjustified kill will trigger the automatic banishment, check your frags with /frags command.- Fixed a bug where applying banishment for excessive player killing wasn't working. - GM Peonso comes back from vacation trip. - Fixed bugs making quest at Turim banshees not being reachable. - Fixed a bug making base tiles of Turim depot pyramid being slow. - Fixed a bug with a quest where the reward was a bugged chameleon rune (if someone want to trade ask me). - Plural of fish correct set now as fish. - NPC Liv now sells purple tapestry and correctly sells indoor plants packed. - Dresser furniture kit should be working. - Postman missions added to quest log.
  3. September 8 Update Today, I expect that somewhere around 16 PM at my local time, something like 22 PM western Europe, I will close the server for something like 10 minutes to apply an update. All characters will be teleported to their hometown temple. Turim city will gain a food shopkeeper, nine houses, a new temple, and a container shopkeeper that sell all sorts of bags and backpacks. Xanadu will gain a blacksmith NPC, a furniture shopkeeper and a magic shop. Now, there will be a small chance of a raid of monsters attack Guilcera. There will also be a NPC added related to some sort of Postman quest that will give access to old and new locked mailboxes around Guilcera. I will change the current website banner for one with images from the current actions, you still have time to submit your screenshot here. And last but not least, a new NPC, russian shopkeeper Svetlana, that is located in a secret shop at some demon spawn, and is buying green tunic, naginata and most importantly, chain legs. Keep in mind that things might go wrong, and updated might be delayed, but some players asked to some warning regarding this changes, and I thought it would be fair to advertise it coming.
  4. JOIN the Discord Server: Discord - Free voice and text chat for gamers Less than 2 HOURS.
  5. Our website: http://guilcera.otrealm.com Guilcera will be launched Friday, 25 August 2017, 18:00 CET. Create your account now! Warsaw, Poland - 25 August 2017, 19:00 Stockholm, Sweden - 25 August 2017, 19:00 Paris, France - 25 August 2017, 19:00 Brasilia, Brazil - 25 August 2017, 14:00 Tokyo, Japan - 26 August 2017, 02:00 Washington, USA - 25 August 2017, 13:00 Mexico City, Mexico - 25 August 2017, 12:00 Guilcera is a old school OpenTibia server, with a custom map, the old gameplay we nostalgics love, and some surprises as well. It has the game mechanics from 7.72, spell system from 7.4 and monsters based on the 7.7 leaked files. We have a large number of hidden quests and secret areas that you will have to discover for yourself. Also, the entire experience is free, you won't need to pay/donate anything to fully experience the world of Guilcera. You need our custom client to play Guilcera. Download it here. It features: Skills and Magic rates are staged, you advance faster in the beginning. Game mechanics from 7.72. Spells system the same as 7.4 Tibia. Monsters from 7.7. Party can share exp. Knights and paladins damage is buffed. Mana regen is slightly faster. Loot message can be enabled/disabled. Exp Rate From 01 To 29 - x20 From 30 To 39 - x18 From 40 To 49 - x16 From 50 To 54 - x15 From 55 To 59 - x14 From 60 To 64 - x13 From 65 To 69 - x12 From 70 To 74 - x10 From 75 To 79 - x8 From 80 To 89 - x6 From 90 To 99 - x4 From 100 To 109 - x3 From 110 To 139 - x2 From 140 - x1 Starter city, Peonsville: Guilcera Minimap: Ingame screenshots: Join Guilcera now!
  6. @Samuro Just some feedback here. You should create a archive subforum and throw there all those old threads, I came here to get some info for this Therran project, and got really confused with all these old stuff.
  7. Don't see a need. Portuguese speaking community is already spread, you will just divide it more.
  8. Same here, I was using just one NPC with was working well, as soon as I added the second they started to bug. They all became the same, as if they are reading the same lua file. ;/ Using last revision, 91, to 7.6.
  9. It's fixed.
  10. SPAM!!! Found more 2 bugs, I hope they are the lasts. With the "negotiation" issue, if a character open it with 'sell' or 'buy' and logout or just move far, the NPC will keep the negotiation open, and even if another character talk to him, the first answer will be 'Hmm, but next time.' or 'Maybe next time.'. I just spammed '_state = 0' all over the script and it work really better now, with this problem solved. (if you try to 'sell something' and then immediately say 'buy something', it still replies with 'Maybe next time.', but I don't think it's a big of a problem) The second problem involving selling stackables items with exactly multiples of 100, if you tried to buy 200 worms, it will give you 201 by the price of 200, due to a poorly modification I did, now it's solved. _state = 0 _count = 0 _index = 0 _delay = 500 items = {} items[0] = {name = 'worm', id = 3976, subtype = 1, sell = 1, buy = -1, stackable = 1} items[1] = {name = 'torch', id = 2050, subtype = -1, sell = 2, buy = -1, stackable = 0} items[2] = {name = 'shovel', id = 2554, subtype = -1, sell = 50, buy = -1, stackable = 0} items[3] = {name = 'scythe', id = 2550, subtype = -1, sell = 50, buy = -1, stackable = 0} items[4] = {name = 'rope', id = 2120, subtype = -1, sell = 50, buy = -1, stackable = 0} items[5] = {name = 'bag', id = 1995, subtype = -1, sell = 5, buy = -1, stackable = 0} items[6] = {name = 'backpack', id = 2002, subtype = -1, sell = 20, buy = -1, stackable = 0} items[7] = {name = 'pick', id = 2553, subtype = -1, sell = 50, buy = -1, stackable = 0} items[8] = {name = 'machete', id = 2420, subtype = -1, sell = 35, buy = 6, stackable = 0} items[9] = {name = 'rod', id = 2580, subtype = -1, sell = 150, buy = -1, stackable = 0} items[10] = {name = 'crowbar', id = 2416, subtype = -1, sell = 260, buy = -1, stackable = 0} local function onActionItem(action) if (action == 'buy' and items[_index].sell == -1) then selfSay('I\'m not selling it.', _delay * 2) _state = 0 return elseif (action == 'sell' and items[_index].buy == -1) then selfSay('I\'m not interested.', _delay * 2) _state = 0 return end DESCRIPTION = getItemDescriptions(items[_index].id) amount = '' NAME_TO_SAY = DESCRIPTION.name plural = DESCRIPTION.article if (_count > 1) then amount = '' .. tostring(_count) NAME_TO_SAY = DESCRIPTION.plural plural = '' end cost = items[_index].buy if (_count > 1) then cost = items[_index].buy * amount end if (action == 'buy') then cost = items[_index].sell if (_count > 1) then cost = items[_index].sell * amount end end selfSay('Do you want to ' .. action .. ' ' .. plural .. amount .. ' ' .. NAME_TO_SAY .. ' for ' .. cost .. ' gold?') end function getNext() nextPlayer = getQueuedPlayer() if (nextPlayer ~= nil) then if (getDistanceToCreature(nextPlayer) <= 4) then updateNpcIdle() setNpcFocus(nextPlayer) _state = 0 selfSay('Hi there ' .. getCreatureName(nextPlayer) .. '.', _delay * 3) return else getNext() end end setNpcFocus(0) resetNpcIdle() end function _selfSay(message) selfSay(message, _delay) updateNpcIdle() end -- function onCreatureAppear(cid) end function onCreatureDisappear(cid) if (getNpcFocus() == cid) then selfSay('See you.', _delay) _state = 0 getNext() else unqueuePlayer(cid) end end function onCreatureMove(cid, oldPos, newPos) if (getNpcFocus() == cid) then faceCreature(cid) if (oldPos.z ~= newPos.z or getDistanceToCreature(cid) > 4) then selfSay('See you.', _delay) _state = 0 getNext() end else if (oldPos.z ~= newPos.z or getDistanceToCreature(cid) > 4) then unqueuePlayer(cid) end end end function onCreatureSay(cid, type, msg) if (getNpcFocus() == 0) then if ((msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and getDistanceToCreature(cid) <= 4) then updateNpcIdle() setNpcFocus(cid) selfSay('Hi ' .. getCreatureName(cid) .. '! Are you new in Peonsville?', _delay) end elseif (getNpcFocus() ~= cid) then if ((msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and getDistanceToCreature(cid) <= 4) then selfSay('Sorry ' .. getCreatureName(cid) .. ', I\'m talking to a customer. Please stand in line.', _delay) queuePlayer(cid) end else if (msgcontains(msg, 'bye')or msgcontains(msg, 'farewell')) then selfSay('Good bye.', _delay) _state = 0 getNext() elseif (msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) then _selfSay('I\'m already talking to you.') _state = 0 elseif (msgcontains(msg, 'name')) then _selfSay('I am Tom. I am selling everything the adventurer needs.') _state = 0 elseif (msgcontains(msg, 'job')) then _selfSay('I am selling equipment of all kinds. Do you need anything?') _state = 0 elseif (msgcontains(msg, 'food')) then _selfSay('Sorry, I don\'t sell food.') _state = 0 elseif (msgcontains(msg, 'time')) then _selfSay('It\'s ' .. getTibiaTime() .. ' right now.') _state = 0 elseif (msgcontains(msg, 'offer') or msgcontains(msg, 'goods')) then _selfSay('I\'m sell crowbars, fishing rods, machetes, picks, backpacks, bags, ropes, scythes, shovels, torches and worms.') _state = 0 elseif (_state == 1) then if (msgcontains(msg, 'yes')) then if (doPlayerRemoveMoney(cid, items[_index].sell * _count) == 1) then if items[_index].stackable == TRUE then local _stacks = math.floor(_count/100) _count = _count - _stacks*100 if _stacks > 0 then for i = 1, _stacks do doPlayerAddItem(cid, items[_index].id, 100) end end if _count > 0 then doPlayerAddItem(cid, items[_index].id, _count) end else for i = 1, _count do doPlayerAddItem(cid, items[_index].id, items[_index].subtype) end end selfSay('Here you are.', _delay) else selfSay('Come back, when you have enough money.', _delay) end updateNpcIdle() else selfSay('Hmm, but next time.', _delay) end _state = 0 elseif (_state == 2) then if (msgcontains(msg, 'yes')) then if (doPlayerRemoveItem(cid, items[_index].id, _count, items[_index].subtype) == 1) then doPlayerAddMoney(cid, items[_index].buy * _count) selfSay('Ok. Here is your money.') else if (_count > 1) then selfSay('Sorry, you do not have so many.', _delay) else selfSay('Sorry, you do not have one.', _delay) end end updateNpcIdle() else selfSay('Maybe next time.', _delay) end _state = 0 else for n = 0, table.getn(items) do if (msgcontains(msg, items[n].name) or msgcontains(msg, items[n].name .. "s")) then _count = getCount(msg) _index = n if (msgcontains(msg, 'sell')) then _state = 2 onActionItem('sell') else _state = 1 onActionItem('buy') end updateNpcIdle() break end end end end end function onThink() if (getNpcFocus() ~= 0) then if (isNpcIdle()) then selfSay('See you.', _delay) _state = 0 getNext() end end end
  11. sorry for the spam, there is a bug with the npc above, and also alexander.lua that cause them to "sell" for free a item it's only supposed to buy. Name the item, he will not answer, them say "yes" and you get it for free. The version that follows do not got this bug, and do not has the one mentioned on the last post (" if I say 'bye', when I enter again in conversation he will still answer me as if I rejected the negociation."). It still mess if I interrupt the negociation by saying another thing. _state = 0 _count = 0 _index = 0 _delay = 500 items = {} items[0] = {name = 'worm', id = 3976, subtype = 1, sell = 1, buy = -1, stackable = 1} items[1] = {name = 'torch', id = 2050, subtype = -1, sell = 2, buy = -1, stackable = 0} items[2] = {name = 'shovel', id = 2554, subtype = -1, sell = 50, buy = -1, stackable = 0} items[3] = {name = 'scythe', id = 2550, subtype = -1, sell = 50, buy = -1, stackable = 0} items[4] = {name = 'rope', id = 2120, subtype = -1, sell = 50, buy = -1, stackable = 0} items[5] = {name = 'bag', id = 1995, subtype = -1, sell = 5, buy = -1, stackable = 0} items[6] = {name = 'backpack', id = 2002, subtype = -1, sell = 20, buy = -1, stackable = 0} items[7] = {name = 'pick', id = 2553, subtype = -1, sell = 50, buy = -1, stackable = 0} items[8] = {name = 'machete', id = 2420, subtype = -1, sell = 35, buy = 6, stackable = 0} items[9] = {name = 'rod', id = 2580, subtype = -1, sell = 150, buy = -1, stackable = 0} items[10] = {name = 'crowbar', id = 2416, subtype = -1, sell = 260, buy = -1, stackable = 0} local function onActionItem(action) if (action == 'buy' and items[_index].sell == -1) then selfSay('I\'m not selling it.', _delay * 2) _state = 0 return elseif (action == 'sell' and items[_index].buy == -1) then selfSay('I\'m not intrested.', _delay * 2) _state = 0 return end DESCRIPTION = getItemDescriptions(items[_index].id) amount = '' NAME_TO_SAY = DESCRIPTION.name plural = DESCRIPTION.article if (_count > 1) then amount = '' .. tostring(_count) NAME_TO_SAY = DESCRIPTION.plural plural = '' end cost = items[_index].buy if (_count > 1) then cost = items[_index].buy * amount end if (action == 'buy') then cost = items[_index].sell if (_count > 1) then cost = items[_index].sell * amount end end selfSay('Do you want to ' .. action .. ' ' .. plural .. amount .. ' ' .. NAME_TO_SAY .. ' for ' .. cost .. ' gold?') end function getNext() nextPlayer = getQueuedPlayer() if (nextPlayer ~= nil) then if (getDistanceToCreature(nextPlayer) <= 4) then updateNpcIdle() setNpcFocus(nextPlayer) selfSay('Hi there ' .. getCreatureName(nextPlayer) .. '.', _delay * 3) return else getNext() end end setNpcFocus(0) resetNpcIdle() end function _selfSay(message) selfSay(message, _delay) updateNpcIdle() end -- function onCreatureAppear(cid) end function onCreatureDisappear(cid) if (getNpcFocus() == cid) then selfSay('See you.', _delay) getNext() else unqueuePlayer(cid) end end function onCreatureMove(cid, oldPos, newPos) if (getNpcFocus() == cid) then faceCreature(cid) if (oldPos.z ~= newPos.z or getDistanceToCreature(cid) > 4) then selfSay('See you.', _delay) getNext() end else if (oldPos.z ~= newPos.z or getDistanceToCreature(cid) > 4) then unqueuePlayer(cid) end end end function onCreatureSay(cid, type, msg) if (getNpcFocus() == 0) then if ((msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and getDistanceToCreature(cid) <= 4) then updateNpcIdle() setNpcFocus(cid) selfSay('Hi ' .. getCreatureName(cid) .. '! Are you new in Peonsville?', _delay) end elseif (getNpcFocus() ~= cid) then if ((msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and getDistanceToCreature(cid) <= 4) then selfSay('Sorry ' .. getCreatureName(cid) .. ', I\'m talking to a customer. Please stand in line.', _delay) queuePlayer(cid) end -- not working, don't know why, bugging npc -- elseif (getNpcFocus() == cid) then -- if ((msgcontains(msg, 'hi') or msgcontains(msg, 'hello')) and getDistanceToCreature(cid) <= 4) then -- selfSay('I\'m already talking to you.') -- end else if (msgcontains(msg, 'bye')or msgcontains(msg, 'farewell')) then selfSay('Good bye.', _delay) _state = 0 getNext() elseif (msgcontains(msg, 'name')) then _selfSay('I am Tom. I am selling everything the adventurer needs.') elseif (msgcontains(msg, 'job')) then _selfSay('I am selling equipment of all kinds. Do you need anything?') elseif (msgcontains(msg, 'food')) then _selfSay('Sorry, I don\'t sell food.') elseif (msgcontains(msg, 'time')) then _selfSay('It\'s ' .. getTibiaTime() .. ' right now.') elseif (msgcontains(msg, 'offer') or msgcontains(msg, 'goods')) then _selfSay('I\'m sell crowbars, fishing rods, machetes, picks, backpacks, bags, ropes, scythes, shovels, torches and worms.') elseif (_state == 1) then if (msgcontains(msg, 'yes')) then if (doPlayerRemoveMoney(cid, items[_index].sell * _count) == 1) then if items[_index].stackable == TRUE then local _stacks = math.floor(_count/100) _count = _count - _stacks*100 doPlayerAddItem(cid, items[_index].id, _count) if _stacks > 0 then for i = 1, _stacks do doPlayerAddItem(cid, items[_index].id, 100) end end else for i = 1, _count do doPlayerAddItem(cid, items[_index].id, items[_index].subtype) end end selfSay('Here you are.', _delay) else selfSay('Come back, when you have enough money.', _delay) end updateNpcIdle() else selfSay('Hmm, but next time.', _delay) end _state = 0 elseif (_state == 2) then if (msgcontains(msg, 'yes')) then if (doPlayerRemoveItem(cid, items[_index].id, _count, items[_index].subtype) == 1) then doPlayerAddMoney(cid, items[_index].buy * _count) selfSay('Ok. Here is your money.') else if (_count > 1) then selfSay('Sorry, you do not have so many.', _delay) else selfSay('Sorry, you do not have one.', _delay) end end updateNpcIdle() else selfSay('Maybe next time.', _delay) end _state = 0 else for n = 0, table.getn(items) do if (msgcontains(msg, items[n].name) or msgcontains(msg, items[n].name .. "s")) then _count = getCount(msg) _index = n if (msgcontains(msg, 'sell')) then _state = 2 onActionItem('sell') else _state = 1 onActionItem('buy') end updateNpcIdle() break end end end end end function onThink() if (getNpcFocus() ~= 0) then if (isNpcIdle()) then selfSay('See you.', _delay) getNext() end end end