-
Total de itens
250 -
Registro em
-
Última visita
-
Dias Ganhos
14
Tudo que Kydrai postou
-
Esse erro da quando a criatura morre antes de executar toda magia. Você ainda pode diminuir o script já que todos os combats são iguais. Pra resolver o erro: local function onCastSpell1(parameters) if isCreature(parameters.cid) then doCombat(parameters.cid, parameters.combat1, parameters.var) end end local function onCastSpell2(parameters) if isCreature(parameters.cid) then doCombat(parameters.cid, parameters.combat2, parameters.var) end end local function onCastSpell3(parameters) if isCreature(parameters.cid) then doCombat(parameters.cid, parameters.combat3, parameters.var) end end local function onCastSpell4(parameters) if isCreature(parameters.cid) then doCombat(parameters.cid, parameters.combat4, parameters.var) end end
-
Você colocou: Faltou um 'n' -> function.
-
Dei uma olhada rápida. Substitua: elseif param == "reset" or param == "resets" then name = name.."\n" name = name.."Rank Reset - Nome do Jogador\n" local v = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = 1020 ORDER BY cast(value as INTEGER) DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("player_id")..']' end name = name..kk..". "..v:getDataInt("value").." - "..name_now..space.." \n" until v:next() == false Por: elseif param == "reset" or param == "resets" then name = name.."\n" name = name.."Rank Reset - Nome do Jogador\n" local v = db.getResult("SELECT `id`, `reset` FROM `players` ORDER BY reset DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("id")), string.len(getPlayerNameByGUID2(v:getDataInt("id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("id")..']' end name = name..kk..". "..v:getDataInt("reset").." - "..name_now..space.." \n" until v:next() == false Se não der certo posta o erro.
-
Vc ta tentando converter os valores. Acho que g_spells->getInstantSpellByName(spell)->castSpell(creature); é um valor bool. Se for isso mesmo tenta assim: if(g_spells->getInstantSpellByName(spell)->castSpell(creature)) { lua_pushboolean(L, true); return 1; } lua_pushboolean(L, false); return 1; }
-
ret = g_spells->getInstantSpellByName(spell)->castSpell(Creature, spell); Pelo que vi o Creature deveria ser creature.
-
Muito bom, também já vi várias pessoas passando por essa dificuldade. Esse tutorial vai ser muito útil.
-
@mihaf Essa mensagem deve estar aparecendo porque existe outro script utilizando essa porta, como a porta de level, premium, etc.
-
Os OTs ja possuem sistema de reflect, pelo menos no TFS. E como o J04ZAN disse, isso facilitaria demais o jogo.
-
@amour Não sei o que pode ser, pra isso acontecer seu site deve estar deletando ou resetando a linha da account. Testei aqui no Gesior e funcionou normalmente. @Topic Tópico atualizado, agora é possível colocar vip status e vender vip pelo site.
-
talkaction [Talkaction] Top Killer's ~
tópico respondeu ao Saymon14 de Kydrai em Actions e Talkactions
Achei interessante o script, o ruim é te que faze isso pra todos os monstros, e fica melhor ficando só nos bosses mesmo. E uma coisa importante. Se você fizer isso só vai da merda porque tem muito script por aí que utiliza storage como varchar e não int. O jeito então é fazer um cast na hora de selecionar os valores: result = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..crat.." ORDER BY cast(value as INTEGER) DESC, `player_id` ASC;") Seria bom colocar o creaturescript também. -
Ela existe sim, só que não fica no function.lua, aí só ficam as funções feitas em lua. Você pode procurar as outras funções na pasta 'doc' do seu ot se tiver, ou então se tiver as sources melhor ainda porque você pode ver no arquivo 'luascript.cpp' já que a documentação do tfs não é 100%. Ou ainda vai na área 'Artigos de Scripting' que tem o que você procura.
-
@xkvD Acredito que ficaria assim: if($buy_offer['type'] == 'pacc') { $player_viptime = $buy_player_account->getCustomField('viptime'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); $timeNow = time(); $days = ceil(($player_viptime - $timeNow)/(24*60*60)); $tempo; if($days <= 0) $tempo = dias*(24*60*60)+$timeNow; else $tempo = dias*(24*60*60)+$player_viptime; $buy_player_account->setCustomField('viptime', $tempo);
-
Você quer adicionar os dias pelo site? Se for isso, o código lua ta assim: local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue) Logo, o php deveria ser algo assim: if(dias_de_vip == 0) { $tempo = dias*(24*60*60)+time(); else { $tempo = dias*(24*60*60)+valor_viptime_db; } atualizar viptime no db colocando $tempo no valor;
-
Já corrigi eu acho. Obrigado por avisar.
-
Até dá, mas você teria que bloquear para que ninguém criasse um char com o nome antigo desse player.
-
Eu dei uma olhada em algumas coisas, você poderia evitar a repetição de variáveis como local pokein, pokeout = 2222,2223 e a tabela de pokemons colocando tudo na pasta lib. E no npc do healer poderia colocar algo assim (não testei): for slot = CONST_SLOT_FIRST, CONST_SLOT_LAST do local item = getPlayerSlotItem(cid, slot) if isContainer(item) then local items = getItemsInContainerById(item.uid, pokein) for _, uid in pairs(items) do local maxh = tonumber(getDescription(uid):match("/(.+)]")) doItemSetAttribute(uid, "description", getDescription(uid):sub(1, findLetter(getDescription(uid), "[")) .. maxh .. getDescription(uid):sub(findLetter(getDescription(uid), "/"))) end elseif item.itemid == pokein then local maxh = tonumber(getDescription(item.uid):match("/(.+)]")) doItemSetAttribute(item.uid, "description", getDescription(item.uid):sub(1, findLetter(getDescription(item.uid), "[")) .. maxh .. getDescription(item.uid):sub(findLetter(getDescription(item.uid), "/"))) end end
-
action [Action] Varinha Mágica *.*
tópico respondeu ao MaXwEllDeN de Kydrai em Actions e Talkactions
Simples mas legal. Ainda precisa estudar um pouco mais tabelas e evitar repetições desnecessárias. Você poderia fazer algo assim: local items = {[2494] = 2492} if items[item2.itemid] then doTransformItem(item2.uid, items[item2.itemid]) ... -
@xkvD Na verdade não é adicionado somente o tempo da vip. os.time() + (days * 24 * 60 * 60) = tempo atual do relógio no seu servidor + dias de vip Todo esse tempo está em segundos. Se quiser usar no php pode usar time() -> link
-
Bom script. Concerteza vai ajudar muita gente.
-
Foi um erro meu. Tenta assim: function onLogin(cid) registerCreatureEvent(cid, "logout_summon") return TRUE end function onLogout(cid) local summons = getCreatureSummons(cid) if #summons > 1 then -- mais de 1 summon doPlayerSendCancel(cid, "Você não pode deslogar com mais de 1 summon") return FALSE end return TRUE end
-
Os tutoriais aqui do xt são muito bons e te dão a base para oq vc precisa saber sobre lua, ou então usa o manual lua mesmo. Nunca cheguei a avaliar um script de OT como básico, intermediário ou avançado, porque são praticamente a mesma coisa, o que muda é a lógica implementada. Acho que a melhor forma de aprender é atendendo os pedidos de scripts do fórum, mesmo se já estiver respondido você pode fazer o seu próprio script e comparar com o de quem fez. Você disse que considera a maioria dos tutoriais daqui básicos, então oq não seria básico para você?
-
[Dev C++] Como Compilar Um Otserv
tópico respondeu ao comedinhasss de Kydrai em Tutoriais de Programação
@Tonynh Esse link é do open tibia, não do tfs. As sources do TFS podem ser baixadas neste link: http://otland.net/subversion.php?svn=public&file=listing.php&repname=forgottenserver&path=/tags/#a2752a4ad0822c5acbda0ff9fd26a5c26 -
Pelo que vc disse, se o player tiver mais de 1 summon. Tenta assim: creaturescripts.xml <event type="login" name="login_summon" script="summon.lua"/> <event type="logout" name="logout_summon" script="summon.lua"/> summon.lua function onLogin(cid) registerCreatureEvent(cid, "logout_summon") return TRUE end function onLogout(cid) local summons = getCreatureSummons(cid) if #summons > 1 then -- mais de 1 summon doPlayerSendCancel(cid, "Você não pode deslogar com mais de 1 summon") return FALSE end return TRUE end
-
creaturescripts.xml: <event type="preparedeath" name="SummonDie" script="summon_die.lua"/> summon_die.lua: function onPrepareDeath(cid, deathList) local pid = getCreatureMaster(cid) if isPlayer(pid) then doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu pet morreu.") doPlayerAddItem(pid, 2695) end return TRUE end No xml dos monstros que poderão ser sumonados você precisa colocar: <script> <event name="SummonDie"/> </script>
-
action [Action] Fishing System (Pokémon Ots)
tópico respondeu ao Mechainy de Kydrai em Actions e Talkactions
Legal o script. Dava pra diminuir bastante coisa aí. Mas vlw a contribuição.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.