• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Problem z NPC

Saper1995

Technologic
Joined
Jul 11, 2009
Messages
104
Reaction score
3
Location
Poland
Witam :) Podratuje mnie ktoś i poprawi co źle bo już nie mam pojęcia jak ustawić ten Addevent.

W całym skrypcie chodzi dokładnie o te linie:
addEvent(setPlayerStorageValue, 2*60*1000, 17101, -1, cid)
addEvent(setPlayerStorageValue, 2*60*1000, 17103, 1, cid)

A oto błąd z konsolki:
a1hncz.jpg



Cały NPC:
Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local price = 5000
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    if(msgcontains(msg, 'secret') and getPlayerStorageValue(cid,17100) >= 0 and getPlayerStorageValue(cid,17101) <= 0 and getPlayerStorageValue(cid,17103) <= 0 and getPlayerMoney(cid) >= 5000) then
        npcHandler:say("XXX1", cid)
        talkState[talkUser] = 2
    elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
        if getPlayerStorageValue(cid,17101) >= 1 then
            npcHandler:say("XXX2", cid)
        else
            if getPlayerStorageValue(cid,17100) >= 0 and getPlayerStorageValue(cid,17101) <= 0 and getPlayerStorageValue(cid,17103) <= 0 and getPlayerMoney(cid) >= 5000 then
            npcHandler:say('XXX3', cid)
            doPlayerRemoveMoney(cid,price)
            doSendMagicEffect(getCreaturePosition(cid), 13)
            setPlayerStorageValue(cid,17101,1)
            setPlayerStorageValue(cid,17111,1)
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Your quest log has been updated")
            addEvent(setPlayerStorageValue, 2*60*1000, 17101, -1, cid)
            addEvent(setPlayerStorageValue, 2*60*1000, 17103, 1, cid)
            else
                npcHandler:say("XXX4", cid)
            end
        end
    elseif(msgcontains(msg, 'no') and talkState[talkUser] == 2) and getPlayerStorageValue(cid,17100) >= 0 and getPlayerStorageValue(cid,17101) <= 0 and getPlayerStorageValue(cid,17103) <= 0 and getPlayerMoney(cid) >= 5000 then 
        npcHandler:say("XXX5", cid)
    else
    if(msgcontains(msg, 'no') and talkState[talkUser] == 2) and getPlayerStorageValue(cid,17100) >= 0 and getPlayerStorageValue(cid,17101) >= 1 and getPlayerStorageValue(cid,17103) <= 0 then 
    npcHandler:say("XXX6", cid)
    end
    end
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
 
Funkcja add event działa tak:
Code:
addEvent(nazwaFunkcji, czas, argument1, argument2, ...)
Tak więc:
Code:
addEvent(setPlayerStorageValue, 2*60*1000, 17101, -1, cid)
Zamień na:
Code:
addEvent(setPlayerStorageValue, 2*60*1000, cid, 17101, -1)
 
Funkcja działa teraz w porządku lecz jedynie wtedy kiedy gracz jest non-stop online (bez wylogowania).
Co mogę poradzić aby zmieniło jego storage nawet wtedy kiedy się wyloguje?
bo błąd ten sam co w konsolce : Creature Not Found.
 
Funkcja działa teraz w porządku lecz jedynie wtedy kiedy gracz jest non-stop online (bez wylogowania).
Co mogę poradzić aby zmieniło jego storage nawet wtedy kiedy się wyloguje?
bo błąd ten sam co w konsolce : Creature Not Found.
Hmm, trochę bardziej skomplikowane.
Zmieniasz:
Code:
addEvent(setPlayerStorageValue, 2*60*1000, cid, 17101, -1)
na
Code:
addEvent(forceSetPlayerStorage, 2 * 60 * 1000, cid, 1701, -1)

I gdzieś w libie, najlepiej w 050-function.lua dodajesz taką funkcję:
Code:
function forceSetPlayerStorage(cid, storage, value)
  if isPlayer(cid) then
    setPlayerStorageValue(cid, storage, value)
  else
    db.executeQuery( zapytanie na zmiane storage)
  endif

  return true
end
 
Zaaplikowałem tą funkcję w lib 050-function.lua w takiej postaci :
Code:
function forceSetPlayerStorage(cid, storage, value)
  if isPlayer(cid) then
    setPlayerStorageValue(cid, storage, value)
  else
    db.executeQuery("UPDATE `player_storage` SET `value` = ".. value .." WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. key ..";")
  end
  return true
end

Niestety wywaliło mi to błąd. Odpowiedź konsolki:
2r6309v.jpg


Wiersz 451 odnosi się do zapytania
db.executeQuery("UPDATE `player_storage` SET `value` = ".. value .." WHERE `player_id` = ".. getPlayerGUIDByName(name) .." AND `key` = ".. key ..";")


EDIT: Próbowałem metodą prób i błędów lecz mam za mało wiedzy w temacie bazy więc rozsądek podpowiedział mi, że szkoda czasu i można zrobić to w innym sposób :)


Code:
function forceSetPlayerStoragestart(cid, storage, value)
  if isPlayer(cid) then
    setPlayerStorageValue(cid, storage, value)
  else
        db.executeQuery("UPDATE `player_storage` SET `value` = '-1' WHERE `key` = '17101'")
end
return true
end

function forceSetPlayerStoragenext(cid, storage, value)
  if isPlayer(cid) then
    setPlayerStorageValue(cid, storage, value)
  else
    db.executeQuery("UPDATE `player_storage` SET `value` = '1' WHERE `key` = '17103'")
end
return true
end

Ten kod ^ śmiga aż miło :) Dziękuję Crypton3.

PS. Tak dla rozwikłania zagadki .. może ktoś będzie wiedział dlaczego nie wykrywało wartości 'key'?
 
Last edited:
Jezu no faktycznie :p nawet sam silnik wyrzuca błąd w treści, że nie ma takiej wartości jak key w funkcji.. jak ja to czytałem.. jaki ja ślepy byłem :D wydaje mi się, że raz o tym pomyślałem żeby zmienić na 'storage' lecz nie zmieniłem i pewnie zmieniłbym to, które powinno mieć 'key' znając siebie :D Jeszcze raz WIELKIE DZIĘKI :)
 

Similar threads

Back
Top