• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Pomoc w poprawieniu skryptu

Grochu

New Member
Joined
Aug 10, 2009
Messages
202
Reaction score
2
Witam, mam mały problem. Mianowicie potrzebuję abyście mi pomogli w tym niby prostym skrypcie. Skrypt ma za zadanie przy zalogowaniu postaci zmienić w bazie danych tejże postaci funkcje loss_experience jeżeli ma inną wartość niż 50. Jeżeli ma ją np. 20 to ma automatycznie po zalogowaniu zmienić na 50.

o to co udało się narazie wyskrobać:

Code:
function onLogin(cid)
 
if(getLossExperience(cid) ~= 50)then
doPlayerAddLossExperience(cid, getLossExperienceFor(50) - getPlayerLossExperience(cid))
end
return true
end

W silniku wyskakuje błąd, że nie ma funkcji "lossexperience", wie ktoś może jaka funkcja jest za to odpowiedzialna i mógłby poprawić ten skrypt?
 
Widzę nieźle próbujesz kombinować z nazwami funkcji, jednak pamiętaj że zawsze możesz sięgnąć po pomoc do plikua LUA_FUNCTIONS, ewentualnie luascript.cpp ; )

Z krótkiej analizy Twojego przykładu wynika iż zamiast getLossExperience powinieneś spróbować getPlayerLossPercent(cid, PLAYERLOSS_EXPERIENCE), następnie zamienić doPlayerAddLossExperience na doPlayerSetLossPercent, a dwóch ostatnich w ogóle nie rozumiem.
 
Code:
function onLogin(cid)
if(getPlayerLossPercent(cid, PLAYERLOSS_EXPERIENCE)(cid)~= 50)then
doPlayerSetLossPercent(cid, getLossExperienceFor(50) - getPlayerLossExperience(cid))
end
return true
end

Zrobiłem coś takiego i wyskakuje mi przy tym, że jest to niepoprawna funkcja onDeath ? Tylko dlaczego onDeath, jeżeli jest ona napisana w onLogin? Nie mam pojęcia jak to napisać... No cóż odezwę się jeszcze jutro, tymczasem ja kładę się spać. Dobranoc.
 
Być może w creaturescripts.xml jest zarejestrowana jako "death". Co to jest w ogóle za funkcja getLossExperienceFor? Pierwszy raz widzę.

Rozwiązanie Twojego problemu jest bliżej niż myślisz.
Code:
if(getPlayerLossPercent(cid, PLAYERLOSS_EXPERIENCE)(cid)~= 50)then
doPlayerSetLossPercent(cid, 50)
end

Czyżby nie o to chodziło? ; )
 
Być może w creaturescripts.xml jest zarejestrowana jako "death". Co to jest w ogóle za funkcja getLossExperienceFor? Pierwszy raz widzę.

Rozwiązanie Twojego problemu jest bliżej niż myślisz.
Code:
if(getPlayerLossPercent(cid, PLAYERLOSS_EXPERIENCE)(cid)~= 50)then
doPlayerSetLossPercent(cid, 50)
end

Czyżby nie o to chodziło? ; )

Jakbys poprawil ten straszliwy blad, to moze byloby ok.
 
Ok, udało mi się zmienić i już nie wywala błędów, skrypt wygląda tak:

Code:
function onLogin(cid)
if(getPlayerLossPercent(cid, PLAYERLOSS_EXPERIENCE) ~= 50)then
doPlayerSetLossPercent(cid, 50)
end
end

ALE, po zalogowaniu danej postaci na serwer w bazie danych mimo to nie zmienia jej wartości Loss_Experience na 50, tylko dalej pozostaje na 100. Hmm...

To nie powinno być mniej więcej tak?Bo mi się wydaje, że w skrypcie wyżej nie ma dokładnie sprecyzowane jaką wartośc funkcji ma zmienić:
Code:
function onLogin(cid)
if(getPlayerLossPercent(cid, PLAYERLOSS_EXPERIENCE) ~= 50)then
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE) 50)
end
end
 
Jakbys poprawil ten straszliwy blad, to moze byloby ok.

przepraszam, ale to nie ja popełniłem tego błędu, ja tylko nieumiejętnie skopiowałem i przeoczyłem wybacz ;*

Ok, udało mi się zmienić i już nie wywala błędów, skrypt wygląda tak:

Code:
function onLogin(cid)
if(getPlayerLossPercent(cid, PLAYERLOSS_EXPERIENCE) ~= 50)then
doPlayerSetLossPercent(cid, 50)
end
end

ALE, po zalogowaniu danej postaci na serwer w bazie danych mimo to nie zmienia jej wartości Loss_Experience na 50, tylko dalej pozostaje na 100. Hmm...

To nie powinno być mniej więcej tak?Bo mi się wydaje, że w skrypcie wyżej nie ma dokładnie sprecyzowane jaką wartośc funkcji ma zmienić:
Code:
function onLogin(cid)
if(getPlayerLossPercent(cid, PLAYERLOSS_EXPERIENCE) ~= 50)then
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE) 50)
end
end

Tak dokładnie ma być, tylko zapomniałeś o przecinku.
 
No i w bazie danych będzie to widoczne dopiero po savie, więc od razu po zalogowaniu tego nie widać.
 
Back
Top