Ir para conteúdo

Night Wolf

Herói
  • Total de itens

    341
  • Registro em

  • Última visita

  • Dias Ganhos

    18

Posts postados por Night Wolf

  1. 49 minutos atrás, Aberos disse:

    na verdade o código ser bem escrito é uma obrigação e não um ponto forte.

    não necessariamente, as vezes você vê um app super foda aí vc vai ler o código fonte e é uma bagunça. Na vida real (fora do mundo perfeito do Tibia) vc vai encontrar muito programador que não sabe identar ou que não acha necessário, vai ter muita gambiarra com comentário:

     

    // Funciona, não mexer

     

    Player não se importa se o código é bem escrito ou uma bagunça, isso não influencia em nada. Se você é o programador e consegue entender a bagunça que você fez, ótimo pra você. Se não consegue, mas funciona.. ótimo também. O que importa é a experiencia que você vai proporcionar para os jogadores, os sistemas diferentes e a estória do seu jogo. 

  2. eu li todas as apresentações e confesso que estou bastante desapontado. Eu não ando com muito tempo pra apontar os erros individuais mas eu esperava mais pelo tempo que vocês tiveram pra criar os tópicos das apresentações. Muita pouca coisa foi explicada, era pra vocês destrincharem o projeto de vocês e contar tudo que vocês tem feito, as dificuldades e bugs que vocês foram encontrando: desde o passo que vocês tiveram a idéia, até os primeiros obstáculos e como vocês superaram isso. A sensação que passa é que são projetos abandonados e que vocês não trabalham neles à muito tempo.

    Pra finalizar, digo e repito: Ninguém liga se o código é bem escrito ou fácil de ler, player não lê código.. parem de divulgar isso como se fosse um ponto forte do server!!!!1

  3. Em 08/10/2016 at 18:36, LeirbagOtten disse:

    Opa, Wolf, curto pakas teus scripts, tu é foda, só isso ahueahue

    Me lembro que tu tinha feito uma lib própria e postado no que não deve ser nomeado, não? Tu postou aqui ela?

    Se não, pode me passar o link dele no que não deve ser nomeado? Dei uma procurada e não achei nd, e nela tem umas funções que eu tô precisando MUITO, mas que são cabeças demais para um mero mortal como eu fazer sem o processador cerebral chegar à 97 graus e dar crash na vida pq comeu toda ram.

    ahahaha ainda nao consegui tirar tempo pra trazer todos meus tópicos de lá pra cá, ainda tenho mt conteúdo novo pra trazer ;~ enfim, se vc clicar exatamente aqui voce vai ser direcionado pro link da library, qlqer dúvida me chama pm (nesse fórum aqui) que o outro eu mal tenho entrado

  4. a idéia não é dar dinheiro de graça e quebrar a economia do server. É ser um jogo de azar, sem falar que há diversas maneiras de lucrar em cassinos. Uma das técnicas é sempre apostar o dobro quando perder:

    aposto 100 gps - se eu ganho, ganho 200 gps (100 gps de lucro)
    se eu perco, aposto 200 gps  - se eu ganho ganho 400 gps (100 gps de lucro)
    se eu perco, aposto 400 gps - se eu ganho, ganho 800 gps (100 gps de lucro)
    .
    .
    .
    se eu perco, aposto 2 * a antiga aposta, se eu ganho, ganho 4 * a antiga aposta (4 * antiga aposta - todas as apostas anteriores de lucro).

    PS: Sem falar que sua conta tá errada, vc ganha com 3 X ou 3 O, logo não seria 12,5%.

    1 slot = qlqer coisa.
    2 slot = tem que ser igual ao primeiro (50%)
    3 slot = tem que ser igual ao primeiro (50%).
    A chance total é 0.5 * 0.5 que é 0.25, ou 25%.

  5. Olá pessoas, hoje vim trazer pra vocês um script que inicialmente fiz prum trabalho mas acabei gostando muito dele e decidi postar.
    To meio que indo dormir porque daqui a pouquinho tenho aula então vai ser tudo bem rapido e se vcs tiverem alguma dúvida comentem aqui.

     

    Primeiramente façam uma sala parecida com essa aqui:
    Screenshot_1.png
    Não precisa ser necessariamente assim, mas ela deve ter as 3 bolas, uma alavanca e um local pra botar o dinheiro pras apostas.


    O sistema é baseado naqueles jogos de slot nos cassinos onde você aposta uma quantidade de dinheiro e se tirar 3 peças iguais você recebe o dobro do dinheiro apostado.

    em actions/scripts crie um arquivo chamado cassino.lua e adicione o seguinte dentro dele:
     

    Spoiler
    local config = {leverid = 9826, -- id da alavancatransformedid = 9825, -- id da alavanca ao clicar nelamoneyPos = {x = 146, y = 48, z = 7}, -- posicao que vai o dinheirodelay = 200, -- esse delay e o tempo que demora entre cada shuffleshuffle = 5, -- quantidade de shuffles por cada peça, lembre que a ultima peça vai rodar 3 * shuffle entao evite valores grandes)multiplier = 2, -- por quanto multiplica o dinheiro apostadoeffect = 27}local pieces = { -- POSICOES DE CADA PEÇA.	[1] = {x = 147, y = 47, z = 7},	[2] = {x = 147, y = 48, z = 7},	[3] = {x = 147, y = 49, z = 7}}local function shuffle(id, times, final, pos) -- funcao que rotaciona a peca	local item = getTileItemById(pos, id)	if item and times > 0 then				doRemoveItem(item.uid)		doCreateItem(id == 2638 and 2639 or 2638, 1, pos)		addEvent(shuffle, config.delay, id == 2638 and 2639 or 2638, times - 1, final, pos)	else 		local nid = id		if item and id ~= final then			doRemoveItem(item.uid)			doCreateItem(final, 1, pos)			nid = final		end		if times == 0 then			addEvent(shuffle, config.delay * config.shuffle * #pieces + config.delay * 10, nid, -1, 2639, pos)		end		doSendMagicEffect(pos, math.abs(final - 2638))			endendlocal function premiateWinner(uid, money, eff, result)	if isPlayer(uid) then		if result[1] == result[2] and result[2] == result[3] then			doPlayerAddMoney(uid, money)			doSendMagicEffect(getCreaturePosition(uid), eff)			doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, "[CASSINO] You won ".. money .." gold coins. Congratulations!")		else			doSendMagicEffect(getCreaturePosition(uid), CONST_ME_POFF)			doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, "[CASSINO] You lost. Better luck next time.")		end	endend	function onUse(cid, item, fromPosition, itemEx, toPosition)	if item.itemid == config.leverid then		local pc = getTileItemById(config.moneyPos, 2152)		local cc = getTileItemById(config.moneyPos, 2160)		local money = 0		if pc and pc.type > 0 then			money = money + pc.type * 100			doRemoveItem(pc.uid)		end		if cc and cc.type > 0 then			money = money + cc.type * 10000			doRemoveItem(cc.uid)		end		if money >= 100 then			doTransformItem(item.uid, config.transformedid)			local pos = fromPosition			addEvent(function()				local lever = getTileItemById(pos, config.transformedid)				if lever and lever.uid > 0 then					doTransformItem(lever.uid, config.leverid)				end			end, (config.delay * #pieces) * (config.shuffle + 10))			local result = {}			for i = 1, #pieces do				local id = 2639				result[i] = math.random(0, 1)				shuffle(id, config.shuffle * i, result[i] + 2638, pieces[i])			end						addEvent(premiateWinner, config.delay * #pieces * config.shuffle, cid, money * config.multiplier, config.effect, result)		else			doPlayerSendCancel(cid, "You need to place your offer. The minimum offer is 1 platinum coin.")		end	else		doPlayerSendCancel(cid, "You need to wait the turn end to bet again.")	end	return trueend

     


    Agora em data/actions/actions.xml adicione:

    <action actionid="16541" script="cassino.lua"/>


    Agora só botar a actionid na lever e configurar tudo de acordo com seu sv (as posições ali em pieces são as posições de cada peça, ou cada bola, se preferir.)
    se quiser fazer várias salas é só copiar o código pra um cassino2.lua e registrar outra tag
    <action actionid="16542" script="cassino2.lua"/>;

    Tá tudo comentado no código então acho que dispensa uma explicação formal de como editar, espero que vocês gostem e se alguém quiser/puder grave um gif/video do sistema e me manda que eu edito o tópico. Abraços do Lobo!
     

    Screenshot_1.png.cdda89f5e90888850e003df08e9142a2.png

  6. 43 minutos atrás, Lordfire disse:

    Sim sr, sou eu =):

     

    O callback não é tão pesado, o onWalk só é ativado em players e ao completar o passo, ou seja, cada vez que o movimento é cancelado (ex. pisar num tile de level sem ter level suficiente), não dispara. A engine de Lua é bem leve, Lua é muito otimizado pra scripting embutido.

     

    Na verdade, a última vez que eu vi isso sendo medido, 65% do tempo de processamento do TFS é gasto calculando os spectators de um dado tile, callbacks em Lua são uma parcela ínfima e tem muito espaço pra isso :D

    O numero de checagens ainda seria significativo, isso é praticamente um onThink mas enfim, em todo caso acredito que possua um bug lógico na sua idéia: como ele só é ativado ao completar o walk, se o cara clicar no minimap e iniciar o walk passando pela área a ser descoberta e saindo dela, ela não será dada como descoberta, correto?

  7. ótimo código, só uma dúvida.. vc é mesmo o ranisalt? 

    O unico problema desse callback seria a complexidade.. muitos lugares, muitos players e muitos passos seria o suficiente pra comer a ram inteirinha da máquina. As vezes uma abordagem que parece mais porca (colocar uma dúzia de actionids nas areas que dão acesso à area a ser descoberta) acaba sendo infinitas vezes melhor do que um evento que é acionado a cada passo. 

  8. amigo, sua database salva a senha deles em plaintext ou ele criptografa os dados? pq se for criptografado vc nao vai conseguir logar na conta do cara; Não é mais fácil alterar sua função pra se o cara n tiver online ele adicionar um storage no player e qnd o player logar, se ele tiver X storage maior que 0 então dá Y moedas pra ele (referentes ao valor do storage) e seta o storage pra 0?

  9. 50 minutos atrás, KarlKalvin disse:

     

    Night... você que não entendeu eu postei as 2 funções do local outfit = getPokemonOutfitToSkill e local speed = getPokemonSpeedToSkill , estão nos 2 primeiros quote toda a função do sistema.

     

    E a tabela não é cid é pokeName

     

    local pokeName = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")

     

    vc que não entendeu amigo, o erro não é nesses scripts, é na lib (lê o erro do console, ele diz em ql arquivo e em ql linha), ele tá falando q foi um erro numa função da lib que ocorreu por causa que vc utilizou essa função de forma inválida no script X (e bota o nome do script). Você postar o script não ajuda em nada, o erro é na função. O restante foi só um exemplo pra tentar te ensinar oque causa o erro, eu sei que é pokename e não cid, foi só um exemplo :/

  10. eu não manjo de poketibia, dsculpa.. precisaria refazer toda essa base, o tempo todo ele pede informações q tabelas q possam ser nil, isso gera erros. 

    exemplo:

    local outfit = getCreatureOutfit(cid)
    local look = outfit.looktype

    vc percebe que se nao tiver cid, a função getCreatureOutfit(cid) vai retornar falso e outfit vai ser falso e aí eu vou tar tentando pegar falso.looktype (oque é um erro já que falso nao é uma tabela.)

    É esse erro q tá acontecendo contigo, vc precisa ir na lib e procurar as funções q tão dando erro e verificar se existe a tabela antes de vc pedir as informações dela.

  11. 1- não dá pra setar uniqueid em tempo de execução, o item que ser criado com o uniqueid e não adicionar o uniqueid depois de dar o item.

    2- o uniqueid será único, não dá pra existir 2 itens com msmo uniqueid, por isso a source tem uma proteção de que se alguém tentar separar itens contáveis com uniqueid, os itens irão perder o uniqueid.

    3- por que você não usa action id?

  12. não entendi direito oque vc queria mas acho q é isso aqui

     

    Spoiler
    function  getPokemonOutfitToSkill(pokeName)	local index = 1	for i, v in pairs (addons) do		if v.pokemon == pokeName then			index = i		end	end	if addons[i] and addons[i].fly == 0 then			if flys[pokeName] then  			return flys[pokeName][1]		end	elseif addons[i] and addons[i].ride == 0 then		if rides[pokeName] then    			return rides[pokeName][1]		end		elseif addons[i] and addons[i].surf == 0 then		if surfs[pokeName].lookType then    			return rides[pokeName][1]		end	endend

     

     

  13. olha amigo
    oque vc quer é remover a condition MUTED da criatura que está no top do sqm, logo vc quer pegar a topcreature da posição toPosition, e não do itemEx.
    como está:

    doRemoveCondition(getTopCreature(itemEx).uid, CONDITION_MUTED)

    como deveria ser

    doRemoveCondition(getTopCreature(toPosition).uid, CONDITION_MUTED)

     

  14. vc fez a união dos conjuntos sem remover a intersecção (pessoas que votaram em ATS e comentaram), poketibia ainda ganha em todo caso mas se vocês quiserem pegar nomes que irão se comprometer tudo bem por mim. A questão é: a comunidade agora é só quem desenvolve e ajuda? Eu prometi pra mim mesmo que não iria levar a discussão pra esse nível mas se a idéia é fazer um servidor do XT nós temos que criar algo nosso para nossos membros, sejam eles desenvolvedores ou players. Se a maioria optou por Poketibia, o mínimo que nós como equipe poderíamos fazer é honrar a democracia da coisa. 

    Eu particularmente não tenho tesão nenhum em desenvolver poketibia, porém se for o desejo da maioria eu irei fazer com o maior prazer. 

  15. dá pra montar um servidor com isso somente com as coisas que achamos pelo fórum, o problema maior e acho que a maior dificuldade que os otadmins enfrentam seria conseguir casar esses elementos juntos. o WOE (segundo item que vc comentou) é altamente vinculado à servidores baiaks. A terceira é muito simples, diminui as level doors que dão acesso pras quests, se uma quest tem bixos 100+ e precisa ser nv 60 pra entrar você vai forçar o pessoal nv 60 a ir fazer em grupo ^-^

  16. 16 minutos atrás, miupinho disse:

     

    Pra quê fala então?

     

    foi uma zoeira com o Daniel pois a cerca de 2 meses atrás (quando a gente estava precisando de mapper) ele falou que ia entrar mas dps mudou de idéia. Em todo caso se você realmente deseja fazer parte da equipe é só mandar seu portifólio por pm que eu mando pra equipe avaliar.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...