dalvorsn 268 Postado Abril 12, 2014 Share Postado Abril 12, 2014 Boa tarde, SIMPLESMENTE MUITO IMPRESSIONANTE! Como todos falaram lá no topico essa função consome muita memoria, vou tentar fazer meu codigo de outro modo. Muito obrigado pela ajuda e um grande abraço! REP + Sim, consome, mas e porque ele faz o save no mapa inteiro, se fizer so das houses nao vai ser tanta nao brow Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636482 Compartilhar em outros sites More sharing options...
Mazynho 2 Postado Abril 12, 2014 Share Postado Abril 12, 2014 Boa tarde, SIMPLESMENTE MUITO IMPRESSIONANTE! Como todos falaram lá no topico essa função consome muita memoria, vou tentar fazer meu codigo de outro modo. Muito obrigado pela ajuda e um grande abraço! REP + Usa um creaturescript com a função onThink para verificar se o item com action/unique id está com o tileID X e se já foi usado por alguém, faz isso com uma global storage, se não foi coloca para mudar. Com isso logo ao abrir o server irá mudar o tile. Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636534 Compartilhar em outros sites More sharing options...
Killua 389 Postado Abril 12, 2014 Autor Share Postado Abril 12, 2014 Bom dia, Negativo, os itens são salvos porem o TILE volta a ser o qual está programado no mapa. Tenho essa casa que é do Player: Mateuso Qualquer item que eu jogue dentro ela salva normalmente. Eu tenho um script que ao utilizar certo item no chão, o TILE se modifica e vira outro. O que eu sei é que, quando o server é fechado e aberto novamente são salvos os ITENS que estão acima do TILE, porem o TILE retorna a ser o que está feito no MAPA. O que eu quero fazer é alterar a função de SAVE do server, para salvar o TILE no chão. Quando eu uso o item no chão, o TILE se transforma em outro, como na imagem abaixo: Acho que agora consegui expressar o pedido em si. Aguardando respostas. Grande abraço a todos! Outra idéia é: Ao usar o item que transforma o chão, armazenar a posição numa tabela criada na lib. Exemplo: function onUse(cid, item, fromPosition, itemEx, toPosition) table.insert(tabela, getThingPos(itemEx.uid)) return true end Depois, num globalevents com callback onStartUp, vc transforma os tiles das posições da tabela para o id que vc quer. Para isso, vc pode usar minha função doTransformTile: function doTransformTile(pos, id) pos.stackpos = 0 return doTransformItem(getThingFromPos(pos).uid, id) end function onStartup() for i = 1, #tabela do doTransformTile(tabela[i], 216) end return true end Acredito que assim funcione... Dessa forma não serão necessárias alterações nas sources... Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636544 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 12, 2014 Share Postado Abril 12, 2014 (editado) Usa um creaturescript com a função onThink para verificar se o item com action/unique id está com o tileID X e se já foi usado por alguém, faz isso com uma global storage, se não foi coloca para mudar. Com isso logo ao abrir o server irá mudar o tile. Entendi tua ideia, da para fazer sim, mas nao aconselho onThink, usa o onStartup() Porem, podem ser varios tiles né, então se for usar storage, lembre-se que storages tem apenas 255 caracteres disponiveis, dependendo da quantidade de tiles alterados, pode dar problema na hora de salvar Leitura no hd é um pouco mais lento que database, mas te daria um controle melhor, pode-se usar uma estrutura binaria para executar esse save, algo assim: [2] -- dois bytes(uint16): player id [2] -- dois bytes(uint16): que salvaria o numero de tiles modificados [2] -- dois bytes(uint16): posição x [2] -- dois bytes(uint16): posição y [2] -- dois bytes(uint16): posição z [1] -- um byte(uint8): stackpos [2] -- dois bytes(uint16): itemid ao qual será transformado Ou seja, para cada tile alterado, tu usaria 11 bytes + os 2 do player_id + 2 do numero de tiles [ 2 + 2 + 11 * numero de tiles alterados ] a leitura faria algo assim: local customTileHouse = {} local player_id = file:getU16 local number_of_tiles = file:getU16 customTileHouse[player_id] = {} local tiles = customTileHouse[player_id] local insert = table.insert for tile = 1, number_of_tiles do local x = file:getU16 local y = file:getU16 local z = file:getU16 local stackPos = file:getU8 local itemTransform = file:getU16 insert(tiles, { pos = {x = x, y = y, z = z, stackPos = stackPos}, itemTransform = itemTransform}) end Obs.: sei que não tem os metodos getU16 e etc em lua, mas ja fiz algo semelhante nesse script: http://www.xtibia.com/forum/topic/186169-spr-extractor/?hl=%2Bspr+%2Bextractor Outra idéia é: Ao usar o item que transforma o chão, armazenar a posição numa tabela criada na lib. Exemplo: function onUse(cid, item, fromPosition, itemEx, toPosition) table.insert(tabela, getThingPos(itemEx.uid)) return true end Depois, num globalevents com callback onStartUp, vc transforma os tiles das posições da tabela para o id que vc quer. Para isso, vc pode usar minha função doTransformTile: function doTransformTile(pos, id) pos.stackpos = 0 return doTransformItem(getThingFromPos(pos).uid, id) end function onStartup() for i = 1, #tabela do doTransformTile(tabela[i], 216) end return true end Acredito que assim funcione... Dessa forma não serão necessárias alterações nas sources... A lib so carrega o que esta escrito nos arquivos, ela nao faz save da memoria dinamica Teria que escrever em algum arquivo de la para ser lido no startup Editado Abril 12, 2014 por dalvorsn Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636545 Compartilhar em outros sites More sharing options...
Killua 389 Postado Abril 12, 2014 Autor Share Postado Abril 12, 2014 Tá certo dalvo =S Mas o Omega me deu uma outra idéia: Criar uma tabela na db com as colunas x, y, z e tile_id daí usa o startup para ler ela e transformar o tile Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636552 Compartilhar em outros sites More sharing options...
erenking123 2 Postado Abril 12, 2014 Share Postado Abril 12, 2014 Minha duvida e bem bobinha : (, Gostaria de fazer um dano baseado na skill If getPlayerSkill(cid, 2) A Skill teria que ser >=10 para: doCreatureRemoveHealth(target, -200) elseif If getPlayerSkill(cid, 2) A Skill teria que ser >=20 para: doCreatureRemoveHealth(target, -500) Isso é para uma spell se possível atribuir uma tabela. local skill = 8 then -[skill ID], Dano [10], 500 [20], 500 Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636553 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 12, 2014 Share Postado Abril 12, 2014 Tá certo dalvo =S Mas o Omega me deu uma outra idéia: Criar uma tabela na db com as colunas x, y, z e tile_id daí usa o startup para ler ela e transformar o tile Pode ser, inclusive seria mais facil que meu metodo, so atentar aos tamanhos das variaveis Minha duvida e bem bobinha : (, Gostaria de fazer um dano baseado na skill If getPlayerSkill(cid, 2) A Skill teria que ser >=10 para: doCreatureRemoveHealth(target, -200) elseif If getPlayerSkill(cid, 2) A Skill teria que ser >=20 para: doCreatureRemoveHealth(target, -500) Isso é para uma spell se possível atribuir uma tabela. local skill = 8 then -[skill ID], Dano [10], 500 [20], 500 local damage_table = { --[[ [skill_value] = damage; ]] [10] = 500; [20] = 1000; [50] = 10000; -- ...... } local final_damage = 0; local skill = getPlayerSkill(cid, 2) for skill_value, damage in pairs(damage_table) do if (skill >= skill_value) and (damage > final_damage) then final_damage = damage; end end doCreatureRemoveHealth(target, final_damage) Proximo disso Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636560 Compartilhar em outros sites More sharing options...
erenking123 2 Postado Abril 12, 2014 Share Postado Abril 12, 2014 (editado) Pode ser, inclusive seria mais facil que meu metodo, so atentar aos tamanhos das variaveis local damage_table = { --[[ [skill_value] = damage; ]] [10] = 500; [20] = 1000; [50] = 10000; -- ...... } local final_damage = 0; local skill = getPlayerSkill(cid, 2) for skill_value, damage in pairs(damage_table) do if (skill >= skill_value) and (damage > final_damage) then final_damage = damage; end enddoCreatureRemoveHealth(target, final_damage)Proximo disso Vlw cara, não consegui usa-la, deu erro na linha 20 "ATTEMPT TO COMPARE NUMBER WITH BOLEEAN" Tem como dar um exemplo. Também ocorreu um erro na hora de pegar a skill do player, falando que o player não foi encontrado. Editado Abril 12, 2014 por Ryuujin Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636570 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 12, 2014 Share Postado Abril 12, 2014 Vlw cara, não consegui usa-la, deu erro na linha 20 "ATTEMPT TO COMPARE NUMBER WITH BOLEEAN" Tem como dar um exemplo. Também ocorreu um erro na hora de pegar a skill do player, falando que o player não foi encontrado. Posta como ficou seu script e o erro completo Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636572 Compartilhar em outros sites More sharing options...
erenking123 2 Postado Abril 12, 2014 Share Postado Abril 12, 2014 (editado) Bom o script ficou bem primitivo, tentei resolver o erro mais não consegui, ainda estou tentando aprender um pouco mais. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) local damage_table = { --[[ [skill_value] = damage; ]] [5] = 10; [10] = 15; [15] = 20; [30] = 30; -- ...... } local final_damage = 0; local skill = getPlayerSkill(cid, 2) for skill_value, damage in pairs(damage_table) do if (skill >= skill_value) and (damage > final_damage) then final_damage = damage; end end doCreatureRemoveHealth(target, final_damage) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Editado Abril 12, 2014 por Ryuujin Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636573 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 12, 2014 Share Postado Abril 12, 2014 (editado) Veja bem, teu erro é bem comum para os que estão iniciando. Você está usando funções dependentes da variavel 'cid'(creatureId) fora do escopo da callback onCastSpell O que não for dependente dessa variavel pode ficar do lado de fora do escopo, mas o que depende, precisa ficar no escopo. Ficaria assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) local damage_table = { --[[ [skill_value] = damage; ]] [5] = 10; [10] = 15; [15] = 20; [30] = 30; } function onCastSpell(cid, var) local final_damage = 0; local skill = getPlayerSkill(cid, 2) for skill_value, damage in pairs(damage_table) do if (skill >= skill_value) and (damage > final_damage) then final_damage = damage; end end doCreatureRemoveHealth(target, final_damage) return doCombat(cid, combat, var) end Editado Abril 12, 2014 por dalvorsn Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636582 Compartilhar em outros sites More sharing options...
erenking123 2 Postado Abril 12, 2014 Share Postado Abril 12, 2014 Veja bem, teu erro é bem comum para os que estão iniciando. Você está usando funções dependentes da variavel 'cid'(creatureId) fora do escopo da callback onCastSpell O que não for dependente dessa variavel pode ficar do lado de fora do escopo, mas o que depende, precisa ficar no escopo. Ficaria assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) local damage_table = { --[[ [skill_value] = damage; ]] [5] = 10; [10] = 15; [15] = 20; [30] = 30; } function onCastSpell(cid, var) local final_damage = 0; local skill = getPlayerSkill(cid, 2) for skill_value, damage in pairs(damage_table) do if (skill >= skill_value) and (damage > final_damage) then final_damage = damage; end end doCreatureRemoveHealth(target, final_damage) return doCombat(cid, combat, var) end Haha obrigado novamente,o erro anterior sumiu, mais infelizmente ocorre um erro quando irei chamar a spell. Tirei uma print para ficar mais fácil . Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636603 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Abril 12, 2014 Share Postado Abril 12, 2014 A função doCreatureRemoveHealth não existe no seu servidor. Use doCreatureAddHealth(cid, health) Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636616 Compartilhar em outros sites More sharing options...
RigBy 285 Postado Abril 12, 2014 Share Postado Abril 12, 2014 Eu to criando uma script so que eu queria sabe umas coisa Como faço para usa a posição do player como base e teleporta ele ah digamos 5 sqm a frente ou pros lados e talz. Tipo: ele ta na posição x=1000 y=1000 z=7 ai ele ativa a script vai para umas das posições radomicas ex:x=1005 y=1005 y=7. e também como checar se a posição para onde ele sera teleportado e andavel.Caso não ele use a outra posição. Qaundo tava escrevendo isso eu acabei pensando se assim funciona(e uma gambiara que eu fiz) function onUse(cid, item, frompos, item2, topos) pos = getCreaturePosition(cid) location = { {x=(pos.x)+1, y=(pos.y)+1, z=pos.z}, {x=(pos.x)+2, y=(pos.y)+2, z=pos.z}, {x=(pos.x)+3, y=(pos.y)+3, z=pos.z} } doTeleportThing(cid, location[math.random(#location)]) return true end Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636621 Compartilhar em outros sites More sharing options...
Mazynho 2 Postado Abril 12, 2014 Share Postado Abril 12, 2014 (editado) EDIT: Consegui fazer. Editado Abril 12, 2014 por Mazynho Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/page/9/#findComment-1636628 Compartilhar em outros sites More sharing options...
Posts Recomendados