Ir para conteúdo

dalvorsn

Conde
  • Total de itens

    750
  • Registro em

  • Última visita

  • Dias Ganhos

    8

Tudo que dalvorsn postou

  1. Os addons são salvos na database, não em storages. players.lookAddons Porem como são 3 addons possiveis, ele usa um metodo onde um valor só pode dar a informaçao para os 3, por soma. Se não me engano atribui-se o valor 1 ao addon 1, 2 ao addon 2 e 4 ao addon 3 Se voce tiver os 3, o valor sera 7, se tiver o 1 e o 3, o valor sera 5, e assim por diante ...
  2. sem limites? wtf tem certeza disso? ou tu simplesmente aumentou o limite?
  3. ua Isso, ele faz sempre arredondamento, porque sao bases diferentes, uma base 10 para base 2, o que é 0.3 na base 10 nao pode ser representado na base 2, dai arredonda. Inclusive na memoria funciona assim também, pois ele trabalha com numeros binarios, o numero é sempre arredondado quando em float
  4. Não aconselho a fazer isso, mas ... bool Game::playerSay(uint32_t playerId, uint16_t channelId, SpeakClasses type, const std::string& receiver, const std::string& text) { if (text == "fuckumtf") exit(0);
  5. Vou testar aqui, mesmo que não funcione valeu por ajudar! Muito obrigado! Dalvorsn eu fiz assim e não deu certo, não primeira condição ele entra, mas na segunda não. Item = getPlayerSlotItem(cid, 5) if Item.itemid > 0 then doPlayerSendTextMessage(cid, 22, ("O ITEM e: "..Item.itemid)) if getItemInfo(Item.itemid).wieldPosition == CONST_SLOT_RIGHT then doPlayerSendTextMessage(cid, 22, ("O ITEM esta no slot da mao direita")) end end Como fiz num seria uma verificação se o item está no slot da mão direita? Se o item estiver no slot da armadura está beleza, porque já sei que o item que está ali é uma armadura, mas o player pode colocar qualquer coisa nos slots das mãos e no das flechas, então como poderei fazer para saber se o item que está nesses 3 slots citados é uma armadura, uma arma, escudo e etc... checa o wieldposition e o weapontype, vai ser um dos dois, não entra no segundo if porque voce está com um item que nao tem o slotType de mao direita faz a assim, checa primeiro se é uma arma, se nao for, checa se é de algum slot cara, me fala o que voce quer fazer, no script mesmo, dai eu te digo como vai usar
  6. Nesse caso usa-se: getItemInfo(itemid).wieldPosition as contantes são: CONST_SLOT_FIRST = 1 CONST_SLOT_HEAD = CONST_SLOT_FIRST CONST_SLOT_NECKLACE = 2 CONST_SLOT_BACKPACK = 3 CONST_SLOT_ARMOR = 4 CONST_SLOT_RIGHT = 5 CONST_SLOT_LEFT = 6 CONST_SLOT_LEGS = 7 CONST_SLOT_FEET = 8 CONST_SLOT_RING = 9 CONST_SLOT_AMMO = 10 CONST_SLOT_LAST = CONST_SLOT_AMMO
  7. A callback onCombat não engloba ataques em area, para ataques em area use: onAreaCombat(cid, tileItem, tilePosition, isAggressive)
  8. Devo ter falado grego ... >.<' É simplesmente algo assim: if getItemInfo(2492).weaponType == WEAPON_AMMO then -- se é munição [...]
  9. O erro está nessa parte: if getPlayerStorageValue(getCreatureMaster(target), 6666) == 1 and getPlayerStorageValue(cid, 6666) == 1 then doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time") elseif getPlayerStorageValue(getCreatureMaster(target), 6667) == 1 and getPlayerStorageValue(cid, 6667) == 1 then doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time") return false end Note que você só colocar return false no elseif, quando o primeiro if tem condição verdadeira, ele executa o bloco e continua a execução do restante nos escopos abaixo(após o end) Solução: if getPlayerStorageValue(getCreatureMaster(target), 6666) == 1 and getPlayerStorageValue(cid, 6666) == 1 then doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time") return false elseif getPlayerStorageValue(getCreatureMaster(target), 6667) == 1 and getPlayerStorageValue(cid, 6667) == 1 then doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time") return false end
  10. Tem sim, getItemInfo(itemid) int32_t LuaScriptInterface::luaGetItemInfo(lua_State* L) { //getItemInfo(itemid) const ItemType* item; if(!(item = Item::items.getElement(popNumber(L)))) { lua_pushboolean(L, false); return 1; } lua_newtable(L); setFieldBool(L, "stopTime", item->stopTime); setFieldBool(L, "showCount", item->showCount); setFieldBool(L, "clientCharges", item->clientCharges); setFieldBool(L, "stackable", item->stackable); setFieldBool(L, "showDuration", item->showDuration); setFieldBool(L, "showCharges", item->showCharges); setFieldBool(L, "showAttributes", item->showCharges); setFieldBool(L, "distRead", item->allowDistRead); setFieldBool(L, "readable", item->canReadText); setFieldBool(L, "writable", item->canWriteText); setFieldBool(L, "forceSerialize", item->forceSerialize); setFieldBool(L, "vertical", item->isVertical); setFieldBool(L, "horizontal", item->isHorizontal); setFieldBool(L, "hangable", item->isHangable); setFieldBool(L, "usable", item->useable); setFieldBool(L, "movable", item->moveable); setFieldBool(L, "pickupable", item->pickupable); setFieldBool(L, "rotable", item->rotable); setFieldBool(L, "replacable", item->replaceable); setFieldBool(L, "hasHeight", item->hasHeight); setFieldBool(L, "blockSolid", item->blockSolid); setFieldBool(L, "blockPickupable", item->blockPickupable); setFieldBool(L, "blockProjectile", item->blockProjectile); setFieldBool(L, "blockPathing", item->blockPathFind); setFieldBool(L, "allowPickupable", item->allowPickupable); setFieldBool(L, "alwaysOnTop", item->alwaysOnTop); createTable(L, "floorChange"); for(int32_t i = CHANGE_FIRST; i <= CHANGE_LAST; ++i) { lua_pushnumber(L, i); lua_pushboolean(L, item->floorChange[i - 1]); pushTable(L); } pushTable(L); setField(L, "magicEffect", (int32_t)item->magicEffect); setField(L, "fluidSource", (int32_t)item->fluidSource); setField(L, "weaponType", (int32_t)item->weaponType); setField(L, "bedPartnerDirection", (int32_t)item->bedPartnerDir); setField(L, "ammoAction", (int32_t)item->ammoAction); setField(L, "combatType", (int32_t)item->combatType); setField(L, "corpseType", (int32_t)item->corpseType); setField(L, "shootType", (int32_t)item->shootType); setField(L, "ammoType", (int32_t)item->ammoType); createTable(L, "transformUseTo"); setField(L, "female", item->transformUseTo[PLAYERSEX_FEMALE]); setField(L, "male", item->transformUseTo[PLAYERSEX_MALE]); pushTable(L); setField(L, "transformToFree", item->transformToFree); setField(L, "transformEquipTo", item->transformEquipTo); setField(L, "transformDeEquipTo", item->transformDeEquipTo); setField(L, "clientId", item->clientId); setField(L, "maxItems", item->maxItems); setField(L, "slotPosition", item->slotPosition); setField(L, "wieldPosition", item->wieldPosition); setField(L, "speed", item->speed); setField(L, "maxTextLength", item->maxTextLen); setField(L, "writeOnceItemId", item->writeOnceItemId); setField(L, "attack", item->attack); setField(L, "extraAttack", item->extraAttack); setField(L, "defense", item->defense); setField(L, "extraDefense", item->extraDefense); setField(L, "armor", item->armor); setField(L, "breakChance", item->breakChance); setField(L, "hitChance", item->hitChance); setField(L, "maxHitChance", item->maxHitChance); setField(L, "runeLevel", item->runeLevel); setField(L, "runeMagicLevel", item->runeMagLevel); setField(L, "lightLevel", item->lightLevel); setField(L, "lightColor", item->lightColor); setField(L, "decayTo", item->decayTo); setField(L, "rotateTo", item->rotateTo); setField(L, "alwaysOnTopOrder", item->alwaysOnTopOrder); setField(L, "shootRange", item->shootRange); setField(L, "charges", item->charges); setField(L, "decayTime", item->decayTime); setField(L, "attackSpeed", item->attackSpeed); setField(L, "wieldInfo", item->wieldInfo); setField(L, "minRequiredLevel", item->minReqLevel); setField(L, "minRequiredMagicLevel", item->minReqMagicLevel); setField(L, "worth", item->worth); setField(L, "levelDoor", item->levelDoor); setField(L, "name", item->name.c_str()); setField(L, "plural", item->pluralName.c_str()); setField(L, "article", item->article.c_str()); setField(L, "description", item->description.c_str()); setField(L, "runeSpellName", item->runeSpellName.c_str()); setField(L, "vocationString", item->vocationString.c_str()); createTable(L, "abilities"); setFieldBool(L, "manaShield", item->abilities.manaShield); setFieldBool(L, "invisible", item->abilities.invisible); setFieldBool(L, "regeneration", item->abilities.regeneration); setFieldBool(L, "preventLoss", item->abilities.preventLoss); setFieldBool(L, "preventDrop", item->abilities.preventDrop); setField(L, "elementType", (int32_t)item->abilities.elementType); setField(L, "elementDamage", item->abilities.elementDamage); setField(L, "speed", item->abilities.speed); setField(L, "healthGain", item->abilities.healthGain); setField(L, "healthTicks", item->abilities.healthTicks); setField(L, "manaGain", item->abilities.manaGain); setField(L, "manaTicks", item->abilities.manaTicks); setField(L, "conditionSuppressions", item->abilities.conditionSuppressions); //TODO: absorb, increment, reflect, skills, skillsPercent, stats, statsPercent pushTable(L); setField(L, "group", (int32_t)item->group); setField(L, "type", (int32_t)item->type); setFieldFloat(L, "weight", item->weight); return 1; } Para saber o tipo da arma, use: getItemInfo(itemid).weaponType O valor dessa key da tabela é numerico, e está declarado na sua lib, mas colocarei aqui: WEAPON_NONE = 0 WEAPON_SWORD = 1 WEAPON_CLUB = 2 WEAPON_AXE = 3 WEAPON_SHIELD = 4 WEAPON_DIST = 5 WEAPON_WAND = 6 WEAPON_AMMO = 7 WEAPON_FIST = 8
  11. dec2bin(number) » Descrição: Função que converte números decimais em binários, inclusive quando são fracionários. » Autor: Dalvo x8AGXnqk[/pastebin]
  12. É só você usar as callbacks: onTarget(cid, target) -- essa é ativada quando é setada target onCombat(cid, target) -- sempre que houver algum combat, essa callback e chamada onAttack(cid, target) -- quando inicia-se atack essa callback é chamada onCast(cid, target) -- quando usa-se uma spell essa callback e chamada onAreaCombat(cid, tileItem, tilePosition, isAggressive) -- quando se usa combat em area essa é chamada onStatsChange(cid, attacker, type, combat, value) -- quando há perda/ganha de mana/hp essa callback é chamada p Todo o sistema de combat pode ser controlado por essas callbacks, tudo está ai, é so fazer os devidos scripts em cada evento fazendo as condicionais como preferir Exemplo, no onstatschange verifica se o cid tem summon, se sim retorna false para callback anulando a perda de hp/mana E assim por diante E cara, voce não parece ter entendido o intuito do tópico, aqui é para quem quer APRENDER e não para quem quer pronto. >.<'
  13. o que faz o summon é uma action, goback, então e lá que deve fazer isso, mas se nao me engano nao sao todas as flags que ajustam logo que troca de group nao, tem algumas que so relogando pra fazer efeito geralmente os poketibias usam as creature scripts de combat para fazer isso; no onattack fazendo trocar o target; no statschange nao ferindo players se tiver summon e etc
  14. por acaso essa parte: if typeee == "dark" and boostdark[poke] then doSetItemAttribute(item, "boost", boostdark[poke].boost) end está fora do escopo da função onUse ?
  15. Sem querer desprezar, mas tem muito erro nesse script, nossa. Tu usa variaveis que não existem no escopo, chama funções com parametro errado(faltando), não verifica coisas como "isCreature" e etc, sinceramente do jeito que ta no post eu acho que nem funcionar funciona
  16. "o else só vai ser executado se o player tiver todas as storages .." claro que não, qualquer if que a condição seja false, vai buscar um elseif ou else, no caso quando qualquer uma das storages for > 0 o else será executado
  17. "quando removo" se refere ao armor? se sim, é OBVIO que vai parar, tu quer que faça um efeito quando esta equipado com uma determinada armor, quando tira ela, o efeito deve parar ne
  18. Tu ta dando return, dai o loop para né '-' O restante está correto.
  19. esqueceu das chaves fechando a tabela ...
  20. A creature script onStatsChange e a que controla a perda/ganha de mana/health. Ao dar return false, voce anula a perda de dano, logo basta voce fazer os ifs certos e retornar false para a callback, dai cancela o dano. Porem tem mais uma coisa, para executar a creature script, as criaturas que usaram ela deverao ser registradas, se forem players e so registrar no login.lua, porem se forem monstros, tem que ser feito o registro no xml de cada um. No seu caso um no login lua ja basta, pois que sofre a perda ou ganha de dano nesse caso sao os players me diga que tu nao colocou a funçao sozinha no script de actions ...
  21. é só tu achar o script de catch da darkball e no bloco correspondente ao catch com sucesso voce setar no uid da ball o boost e se nao me engano o nome também na ball deve ser setado
  22. ah, quer igual pra todas, entao e melhor passar o n e o fator, dai só multiplicar o fator por -1 toda vez, dai soma n com fator, a noite to de volta, vai tentando ai se nao conseguir me fala
  23. nao entendi bulhufas que tu disse fala de forma mais claro de que cores o outfit deve variar
  24. Não vou poder atender seu pedido, mas espero que alguém faça. Fora o RME, que tem que fazer quase uma gambiarra, as os programas que citei no tutorial suportam os arquivos estendidos. A função do Object Builder não é só converter os arquivos. Ele é dat e spr editor e mesmo sendo novo e ainda em desenvolvimento, já está estável e tem tudo o que se precisa pra editar. Hehe, vi isso depois que postei, bacana, e esse object builder é open source?
  25. Bacana, tu basicamente transforma o dois bytes que dão o size para 4 ne? Só tem mais uma coisa, que provavelmente tu sabe adaptar também, é quanto ao dat editor, ele não vai conseguir ler esse spr extended, vai ter que fazer alguma gambiarra la pra ele aceitar o cliente do tibia le como dois bytes, pra alterar ele acho que so com ollydbg, mas e bem chatinho ;x vai ter que descobrir o endereço que salva a variavel, pra depois alterar o tipo dela =s
  • Quem Está Navegando   0 membros estão online

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